如何检查两个矩阵的尺寸是否满足相加条件?附无报错实现代码
如何在矩阵加法运算符中检查尺寸匹配
嘿,你的代码目前能运行,但确实缺少了矩阵相加最关键的前置检查——两个矩阵必须是同尺寸(这里是同阶方阵)才能相加。如果传入一个不同尺寸的矩阵,你的代码会直接访问超出数组范围的内存,这会导致未定义行为(可能崩溃,也可能得到错误结果)。
下面是修改后的代码,加入了尺寸检查的逻辑:
#include <stdexcept> // 需要包含这个头文件来使用异常类 matrix operator+(const matrix & mat){ // 第一步:检查两个矩阵的尺寸是否匹配 if (this->mSize != mat.mSize) { throw std::invalid_argument("矩阵尺寸不匹配,无法执行加法操作"); } matrix add; add.mSize = mat.mSize; add.mP = new int[add.mSize * add.mSize]; for(int i = 0; i < add.mSize * add.mSize; i++){ add.mP[i] = mP[i] + mat.mP[i]; } return add; }
关键说明:
- 尺寸检查逻辑:在执行加法前,先对比当前对象(
this)和传入矩阵(mat)的mSize,如果不相等就抛出异常。这样调用者可以通过try-catch块捕获这个错误,避免程序崩溃。 - 异常选择:这里用
std::invalid_argument是因为传入的参数(不同尺寸的矩阵)不符合加法的要求,属于非法参数。 - 替代方案:如果你不想用异常,也可以选择返回一个空矩阵(比如把
add.mSize设为0,add.mP设为nullptr),但异常处理是更规范的错误处理方式,能让调用者明确知道哪里出了问题。
另外,记得你的matrix类要正确实现析构函数、拷贝构造函数和拷贝赋值运算符(遵循Rule of Three),否则会有内存泄漏的风险哦。
内容的提问来源于stack exchange,提问作者user9664805
相关产品推荐
相关产品推荐

