重载运算符 大多数系统预定义的运算符可以重载, 但少数的C++运算符不能重载: #、?:、,、*、 另外,不是运算符的符号,如“;”等也 不能重载。C++还不允许重载不存在的 运算符,如“$” 等 2021/2/10
2021/2/10 6 重载运算符 • 大多数系统预定义的运算符可以重载, 但少数的C++运算符不能重载: :: 、#、 ?:、 .、.* 、 * • 另外,不是运算符的符号,如“;”等也 不能重载。C++还不允许重载不存在的 运算符,如“$” 、 “**”等
例:复数的加操作 class Complex& double re. im: public: Complex(doubler=0.0, double i=0.O): re(r), im(i) Complex add(complex c)t Complex t: tre= re+cre. t im= im t cim: return t: vold main c3=c1.ad(2):这种使用方式 Complex cl(1, 2), c2(3, 4); 不太直观。 Complex c33=c1ad(c2);·我们更希望是如下方式 C=CTC 2021/2/10
2021/2/10 7 例:复数的加操作 class Complex{ double re, im; public: Complex(double r=0.0, double i=0.0): re(r), im(i){ } Complex add(Complex c){ Complex t; t.re = re + c.re; t.im = im + c.im; return t; } }; void main( ) { Complex c1(1, 2), c2(3, 4); Complex c3 = c1.add(c2); } • c3 = c1.add(c2);这种使用方式 不太直观。 • 我们更希望是如下方式: c3=c1+c2;
例:重载复数类的加运算符 class Complex public: Complex operator+(Complex c) Complex t; t re=re c re; tim=im cim return t; }; void main( Complex cl(l, 2), c2(3, 4); Complex c3=c1+c2;相当于c3=c1. operator+(c2); operator+(,称为运算符重载函数 c3=c1+c2称为 operator+(,)函数的隐式调用 8 c3=c1. operator+(c2)称为 operator+(,)函数的显示调用
2021/2/10 8 例:重载复数类的加运算符 class Complex{ …… public: Complex operator+(Complex c){ Complex t; t.re = re + c.re; t.im = im + c.im; return t; } }; void main( ) { Complex c1(1, 2), c2(3, 4); Complex c3 = c1 + c2; //相当于c3 = c1.operator+(c2); } operator+(…)称为运算符重载函数 c3 = c1 + c2称为operator+(…)函数的隐式调用 c3 = c1.operator+(c2)称为operator+(…)函数的显示调用
例:计数器重载运算符 class counter unsigned int value; public: counter ivalue=0 void operator++o void operator--O unsigned int operator(o void counter: operator++ (if (value<1000)value++; 3 void counter:: operator--(if (value>0)value--i unsigned int counter: operator(return value 2021/2/10 9
2021/2/10 9 例:计数器重载运算符 class counter{ unsigned int value; public: counter( ){value=0;} void operator++( ); void operator--( ); unsigned int operator( )( ); }; void counter:: operator++( ){if (value<1000) value++;} void counter:: operator--( ){if (value>0) value--;} unsigned int counter:: operator( )( ){return value;}
void main( counter my counter; for(inti=0;<10;i++){ ++my counter cout<<“ my counter=“<< my counter()<<endl; my counter cout<<“ my counter=“<< my counter()<<endl; 2021/2/10 10
2021/2/10 10 void main( ) { counter my_counter; for(int i=0;i<10;i++){ ++my_counter; cout<<“my_counter=“<<my_counter( )<<endl; } --my_counter; cout<<“my_counter=“<<my_counter( )<<endl; }