繁体   English   中英

课堂上的重载运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM