“Square_Matrix”类的对象存储整数矩阵。
这是我如何检查两个矩阵是否相同?我想通过重载'=='来比较两个2d数组,以检查两个矩阵之间的每个元素是否相同。
例如:我需要以下工作:
Square_Matrix a,b;
if (a == b) {return 1;}
a和b都是动态2d数组。
然而,我收到一个错误:'operator'之前的意外初始化程序。我怎样才能解决这个问题?除此之外,这是语法应该是什么样的?
//header file
bool operator==(Square_Matrix array1, Square_Matrix array2);
//.cpp file
bool Square_Matrix operator ==(Square_Matrix array1, Square_Matrix array2){
if (array1.size != array2.size){
return false;
}
for (int i = 0; i < array1.size; i++){
for (int j = 0; j < array1.size; j++){
if (array1[i][j] != array2[i][j]){
return false;
}
}
}
return true;
}
答案 0 :(得分:3)
大多数二元运算符可以通过两种不同的方式进行重载。一个是作为成员函数,另一个是全局(自由)函数。
成员函数版本将采用一个参数。像x == y
这样的表达式将被解释为x.operator==(y)
。
免费功能版本有两个参数。像x == y
这样的表达式被解释为operator==(x, y)
。
您需要决定要使用哪些,并适当地定义参数的数量。现在,看起来你有一个只有一个参数的自由函数,这对一元运算符有效,但不适用于二元运算符。
当您作为自由函数重载时,通常提供对称性。具体来说,自由函数可以将左操作数或右操作数转换为操作符的正确类型。成员函数重载只能将右操作数转换为操作符的正确类型。
答案 1 :(得分:2)
操作员应声明为
bool operator ==( const Square_Matrix &array2 ) const;
如果它是该类的成员。
或者它可以被声明为类的友元函数
friend bool operator ==( const Square_Matrix &array1, const Square_Matrix &array2 );
我认为该类的数据成员的名称大小包含方阵的大小
bool Square_Matrix::operator ==( const Square_Matrix &array2 ) const
{
if ( size != array2.size ) return false;
for (int i = 0; i < size; i++ )
{
for ( int j = 0; j < size; j++ )
{
if ( mPoint[i][j] != array2.mPoint[i][j] ) return false;
}
}
return true;
}
编辑:我删除了一些拼写错误。
答案 2 :(得分:1)
您的代码的问题是您需要::
bool Square_Matrix operator ==(Square_Matrix array2){
成为这个:
bool Square_Matrix::operator ==(Square_Matrix array2){
错误“'运算符'之前的意外初始值设定项”是因为它不理解您尝试使用类方法。
答案 3 :(得分:0)
将Square_Matrix operator ==
更改为Square_Matrix::operator ==
。
此外,您不想通过引用将Square_Matrix
传递给您的运营商吗?
bool operator==(const Square_Matrix& that) const;
或
static bool operator==(const Square_Matrix& a,
const Square_Matrix& b);