要求:
编写一个程序,重载运算符 “= =”,用于判断两个N维向量是否相等。
思路:
- 建立三个类, 每个类所含数据成员个数不同. 代表一,二,三维向量.
- 因为是逻辑上的判断两个对象是否相等, 所以运算符重载函数选择bool型, 返回值为1或0
- 把运算符重载的函数作为类的成员函数
#include<iostream>
using namespace std;
class Vector1 { //一维向量类
public:
Vector1() {}; //无参构造函数
Vector1(double x) :a(x) {}; //有参构造函数
double a;
bool operator==(Vector1&x) {//成员函数运算符重载函数为bool型(逻辑型)
if (a == x.a) return true;
else return false;
}
};
class Vector2 { //二维向量类
public:
Vector2() {};
Vector2(double x,double y) :a(x),b(y) {}
double a,b;
bool operator==(Vector2&x) {
if (a == x.a&&b == x.b) return true;
else return false;
}
};
class Vector3 { //三维向量类
public:
Vector3() {};
Vector3(double x, double y,double z) :a(x), b(y),c(z) {}
double a, b,c;
bool operator==(Vector3&x) {
if (a == x.a&&b == x.b&&c==x.c) return true;
else return false;
}
};
int main() { //定义三组不同维度的向量对重载函数进行验证
Vector1 v1(2), v2(2);
Vector2 v3(2, 3), v4(3, 3);
Vector3 v5(1, 5, 9), v6(1, 5, 9);
cout << (v1 == v2); cout << endl;
cout << (v3 == v4); cout << endl;
cout << (v5 == v6); cout << endl;
return 0;
}
运行结果 ⬇
问题:
- 当时只写了有参构造函数,调试时运行报错"没有合适的默认构造函数可用",上网查找解决:默认构造函数为无参的,所以添加了无参构造函数得已解决.
但最终程序main函数中建立对象没有调用无参构造函数,所以没有无参构造函数也不会报错了 - "=="为双目运算符,而重载函数中只有一个参数:
运算符重载函数作为类的成员函数时,有一个参数是隐含的
运算符重载函数非成员函数时,需两个参数