二元运算符重载:
全局函数:
#include <iostream> using namespace std; class Complex{//复数类 private: int a; int b; friend Complex operator + (Complex &, Complex &);//注意声明友元函数 public: Complex(int a = 0, int b = 0){ this->a = a; this->b = b; } void print(){ cout << "a: " << a << " " << "b: " << b << endl; } }; Complex operator + (Complex &a1, Complex &a2){ Complex tmp(a1.a + a2.a, a1.b + a2.b); return tmp; } int main() { Complex c1(1, 2), c2(3, 4), c3; c3 = c1 + c2; c3.print(); return 0; }类中: #include <iostream> using namespace std; class Complex{//复数类 private: int a; int b; public: Complex(int a = 0, int b = 0){ this->a = a; this->b = b; } void print(){ cout << "a: " << a << " " << "b: " << b << endl; } Complex operator - (Complex &a2){ Complex tmp(this->a - a2.a, this->b - a2.b); return tmp; } }; int main() { Complex c1(1, 2), c2(3, 4), c3; c3 = c1 - c2; c3.print(); c3 = c2 - c1; c3.print(); return 0; } 一元运算符重载(难于二元)类中和全局函数写在一块儿了
#include <iostream> using namespace std; class Complex{//复数类 private: int a; int b; friend Complex operator ++ (Complex &); friend Complex operator ++ (Complex &, int); public: Complex(int a = 0, int b = 0){ this->a = a; this->b = b; } void print(){ cout << "a: " << a << " " << "b: " << b << endl; } Complex operator -- (){ //前置--操作符,成员函数方法实现 this->a --; this->b --; return (*this); } Complex operator --(int){ //后置--操作符,成员函数方法实现 Complex tmp = (*this); this->a --; this->b --; return tmp; } }; Complex operator ++ (Complex &A){ //前置++操作符,用全局函数实现 A.a ++; A.b ++; return A; } Complex operator ++ (Complex &A, int){//后置++操作符,全局函数实现 加一个占位符跟前置加以区分 Complex tmp = A; A.a ++; A.b ++; return tmp; } int main() { Complex c1(1, 2); //前置++操作符,用全局函数实现 ++c1; //Complex c = operator ++ (c1); c1.print(); //前置--操作符,成员函数方法实现 --c1; //Complex c = c1.operator -- (&c1) c1.print(); //后置++操作符,全局函数实现 c1++; //Complex c = operator ++ (c1, 0); c1.print(); //后置--操作符,成员函数方法实现 c1--; //Complex c = c1.operator -- (0); c1.print(); return 0; }