gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:51:27 25 4
gpt4 key购买 nike

“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com