算数运算符重载
在c++中可以重载的算术运算符有:+,-,*,/,%
其他的不多说上代码:
#includeusing namespace std; //双目算术运算符重载 class count1 { //友元函数重载 friend count1 operator+(const count1& p1, const count1& p); friend count1 operator-(const count1& p1, const count1& p); friend count1 operator*(const count1& p1, const count1& p); friend count1 operator%(const count1& p1, const count1& p); friend count1 operator/(const count1& p1, const count1& p); private: int a; int b; public: //构造函数 count1(int a, int b) :a(a), b(b) {}; //拷贝构造函数 count1(const count1& p) { cout << "拷贝函数" << endl; this->a = p.a; this->b = p.b; } ~count1() {} double aValue() { return this->a; } double bValue() { return this->b; } //成员函数运算符重载 //加号重载 count1 operator+(const count1& p) { count1 temp(0, 0); temp.a = this->a + p.a; temp.b = this->b + p.b; return temp; } count1 operator-(const count1& p) { count1 temp(0, 0); temp.a = this->a - p.a; temp.b = this->b - p.b; return temp; } count1 operator*(const count1& p) { count1 temp(0, 0); temp.a = this->a * p.a; temp.b = this->b * p.b; return temp; } count1 operator/(const count1& p) { count1 temp(0, 0); temp.a = this->a / p.a; temp.b = this->b /p.b; return temp; } count1 operator%(count1& p) { count1 temp(0, 0); if (p.a == 0 || p.b == 0) { cout << "除数不能等于0"; return temp; } temp.a = this->a %p.a; temp.b = this->b % p.b; return temp; } }; //友元函数重载 count1 operator+(const count1& p1, const count1& p) { count1 temp(0, 0); temp.a = p1.a + p.a; temp.b = p1.b + p.b; return temp; } count1 operator-(const count1& p1, const count1& p) { count1 temp(0, 0); temp.a = p1.a - p.a; temp.b = p1.b - p.b; return temp; } count1 operator*(const count1& p1, const count1& p) { count1 temp(0, 0); temp.a = p1.a - p.a; temp.b = p1.b - p.b; return temp; } count1 operator/(const count1& p1, const count1& p) { count1 temp(0, 0); temp.a = p1.a - p.a; temp.b = p1.b - p.b; return temp; } count1 operator%(const count1& p1, const count1& p) { count1 temp(0, 0); temp.a = p1.a - p.a; temp.b = p1.b - p.b; return temp; } void test() { count1 add(10, 20); count1 add1(10, 20); //加号运算符 cout << "加号运算符" << endl; count1 add2 = add + add1; cout << "add2.a=" << add2.aValue() << endl;//add2.a=20 cout << "add2.b=" << add2.bValue() << endl;//add2.b = 40 //减号运算符 cout << "减号运算符" << endl; count1 add3 = add2 - add1; cout << "add3.a=" << add3.aValue() << endl;//add3.a=10 cout << "add3.b=" << add3.bValue() << endl;//add3.b=20 //乘号运算符重载 cout << "乘号运算符" << endl; count1 add4 = add3 * add2; cout << "add4.a=" << add4.aValue() << endl;//add4.a=200 cout << "add4.b=" << add4.bValue() << endl;//add4.b=800 //除号运算符重载 cout << "除号运算符" << endl; count1 add5 = add3 / add2; cout << "add5.a=" << add5.aValue() << endl;//add5.a=0 由于a为int类型,所以为0。若为浮点类型,则为0.5 cout << "add5.b=" << add5.bValue() << endl;//add5.b=0 由于b为int类型,所以为0。若为浮点类型,则为0.5 //取余运算符重载 cout << "乘号运算符" << endl; count1 add6 = add3 % add2; cout << "add6.a=" << add6.aValue() << endl;//10 cout << "add6.b=" << add6.bValue() << endl;//20 } void main1() { test(); system("pause"); }



