我有一个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.
}
我的问题是我可以通过这种方式“添加”任何两个矩阵。仅在矩阵大小相等的情况下,有什么方法可以使运算符重载(当我尝试编译添加两个不能相加的矩阵时会出错)?
当我只想创建具有正数行和列的矩阵时,使用参数化构造函数会遇到相同的问题。到目前为止,我要做的是用两个整数声明构造函数,并且在我输入错误的整数的情况下,只需创建一个空矩阵即可。这会导致同样的问题,因为允许我“创建”具有负数行的矩阵,但是直到后来我想使用该矩阵时我才发现。
答案 0 :(得分:0)
仅在矩阵大小相等的情况下,有什么方法可以使运算符重载吗(当我尝试编译添加两个不能相加的矩阵时会出现错误)?
无法为运行时错误生成编译时错误。
如果您希望在编译时知道矩阵的二元化,则可能会产生编译时错误。可以使用
template <size_t NUM_ROWS, size_t NUM_COLUMNS>
class matrix
{
...
};
您必须确定是否需要您的要求。