1、成员函数+、-运算符重载
①实现:
V operator+(const V &r)
{V A;
int i;
A.a = a + r.a;
return A; // 当当对象的属性中含有指针时需要补充拷贝构造函数
}
②加减法交换律:在已重载+、-运算符的前提下
A、转换构造函数 : 非成员函数(友元函数) 建议最好使用友元
class RMB { int y; public: RMB(const RMB &r) { y = r.y; } RMB(int d = 0) { y = d; } friend RMB operator+(const RMB &left, const RMB &right) { RMB b; b.y = left.y + right.y; return b; } void print() { cout << "y = " << y << endl; } }; int main() { RMB a(2); // 显式转换 RMB b = a + 2; // RMB + int b.print(); b = 2 + b; // int + RMB b.print(); }
B、重载两个成员函数:编译错误?
#include <iostream> using namespace std; class rmb { int a; public: rmb(int a_val = 0) { a = a_val; } rmb(rmb &r) { a = r.a; } rmb operator+(const rmb &r, int c) { int x = r.a+c; rmb b(x); return b; } rmb operator+(int c, const rmb &r) { return r+c; } void print() {cout << a << endl;} }; int main() { rmb a; rmb b = a+1; b.print(); return 0; }