[英]Overloading operator in class
“ Square_Matrix”类的对象存储一个整数矩阵。
这是我如何检查两个矩阵是否相等的方法吗? 我想通过重载'=='比较两个2d数组,以检查2个矩阵之间的每个元素是否相同。
例如:我需要进行以下工作:
Square_Matrix a,b;
if (a == b) {return 1;}
a和b都是动态二维数组。
但是,我遇到一个错误:'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;
}
大多数二进制运算符可以通过两种不同方式之一进行重载。 一个作为成员函数,另一个作为全局(免费)函数。
成员函数版本将采用一个参数。 像x == y
这样的表达式将被解释为x.operator==(y)
。
自由功能版本带有两个参数。 像x == y
这样的表达式被解释为operator==(x, y)
。
您需要确定要使用的参数,并适当定义参数数量。 现在,您似乎拥有一个仅包含一个参数的自由函数,该函数仅适用于一元运算符,不适用于二进制运算符。
当您将重载作为自由函数时,通常会提供对称性。 具体来说,自由函数可以将左或右操作数转换为运算符的正确类型。 成员函数重载只能将正确的操作数转换为运算符的正确类型。
运算符应声明为
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;
}
编辑:我删除了一些错字。
您的代码的问题是您需要::
bool Square_Matrix operator ==(Square_Matrix array2){
变成这个:
bool Square_Matrix::operator ==(Square_Matrix array2){
错误“操作符之前有意外的初始化程序”是因为它不理解您正在尝试使用类方法。
将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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.