重载运算符+仅针对类的特定情况

时间:2019-03-04 18:50:30

标签: c++ matrix operator-overloading

我有一个class matrix,我想重载+运算符,但前提是两个矩阵的行和列数相同。

class matrix
{
private:
    int rows, columns;
    double* data;
public:
    //things here: constructor, destructor etc.
    matrix operator+ (const matrix&) const;
};

然后,我只想添加两个矩阵,如果它们具有相同数量的行和列。 我现在正在做的是:

matrix matrix::operator+(const matrix& adder) const
{
if(rows == adder.rows() && columns == adder.columns())
{
    matrix temporal;
    //Perform the addition
    return temporal;
}
else
    std::cout << "Unable to add matrices" << std::endl;
    //return an empty matrix of 0 rows, 0 columns.
}

我的问题是我可以通过这种方式“添加”任何两个矩阵。仅在矩阵大小相等的情况下,有什么方法可以使运算符重载(当我尝试编译添加两个不能相加的矩阵时会出错)?

当我只想创建具有正数行和列的矩阵时,使用参数化构造函数会遇到相同的问题。到目前为止,我要做的是用两个整数声明构造函数,并且在我输入错误的整数的情况下,只需创建一个空矩阵即可。这会导致同样的问题,因为允许我“创建”具有负数行的矩阵,但是直到后来我想使用该矩阵时我才发现。

1 个答案:

答案 0 :(得分:0)

  

仅在矩阵大小相等的情况下,有什么方法可以使运算符重载吗(当我尝试编译添加两个不能相加的矩阵时会出现错误)?

无法为运行时错误生成编译时错误。

如果您希望在编译时知道矩阵的二元化,则可能会产生编译时错误。可以使用

template <size_t NUM_ROWS, size_t NUM_COLUMNS>
class matrix
{
   ...
};

您必须确定是否需要您的要求。