超载操作员 仅适用于类的特定情况

overload operator+ only for specific case of the class

本文关键字:情况 操作员 适用于 超载      更新时间:2023-10-16

我有一个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.
}

我的问题是我能够以这种方式"添加"任意两个矩阵。有什么办法只能在矩阵相等的情况下超载操作员(当我尝试编译两个无法添加的矩阵时,会出现错误)?

)?

我只想创建一个带有正数的行和列的矩阵时,使用参数化的构造器也存在相同的问题。到目前为止,我要做的就是用两个整数声明构造函数,在情况下,我会发现整数输入只需创建一个空矩阵即可。这会导致同样的问题,因为我可以"创建"一个带负行的矩阵,但是直到我稍后再使用矩阵之前,我才发现。

有什么办法只能在矩阵相等大小的情况下超载操作员(当我尝试编译两个无法添加的矩阵时,会出现错误)?

)?

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

,如果您愿意在编译时知道矩阵的dimenstions,则可以生成编译时错误。这可以使用

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

您必须弄清楚这是否需要您的要求。