c++ - 在类中重载运算符

标签 c++ operator-overloading

“Square_Matrix”类的对象存储一个整数矩阵。

这是我检查两个矩阵是否等价的方法吗?我想通过重载“==”来比较两个二维数组,以检查两个矩阵之间的每个元素是否相同。

例如:我需要以下内容才能工作:

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)

您需要决定要使用哪些参数,并适当定义参数的数量。现在,您似乎有一个只接受一个参数的自由函数,它适用于一元运算符,但不适用于二元运算符。

当您作为自由函数重载时,通常是为了提供对称性。具体来说,自由函数可以将左操作数或右操作数转换为运算符的正确类型。成员函数重载只能将正确的操作数转换为运算符的正确类型。

关于c++ - 在类中重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21844368/

相关文章:

java - 从 C++ 应用程序从 Java 调用 C++ 时,如何避免 UnsatisfiedLinkError?

C++ 进程终止,状态为 -1073741510(0 分钟,2 秒)

android - "java.lang.UnsatisfiedLinkError: *.so: Can' t 在单元测试环境中找到依赖库

c++ - 是否可以使用基类和派生类来实现 Qt Application Plugin?

c++ - 虚拟运算符 float()

c++ - 如何使用 clang 和 llvm-link 链接库

c++ - 是否可以重载索引运算符 [] 以从整数返回位?

c++ - 当两个整数 vector 的第一个元素都是负数时,如何正确使用 < 和 > 运算符?

c++ - std::getline() 将回车符\r 读取到字符串中,如何避免这种情况?

c++ - 试图删除 vector C++ 中所有未定义的节点