这里说明返回值是一个Complex的引用
{
real++; image++;
return *this;
}
Complex operator ++(int) //实现后置++运算符的函数成员
{
Cpmplex temp(*this);
real++; image++;
return temp; //返回+1之前的对象temp
}
};
??示例:
??Complex c1(1.3),c2,c3;
??c2=++c1;c3=c2++;c1.Show();c2.Show(); //显示结果:c1为2+4i;c2为2+4i;c3为2+4i;
3、关系运算符 ==
将关系运算符 == 重载为复数类的函数成员,其代码如下:
bool Complex::operator ==(Complex c)
{
return (real=c.real && image == c.image);
}
值得注意的是,关系运算符函数的返回结果为bool型。
?示例:
??Complex c1(1.3),c2(2,4);
??if( c1 == c2 ) //结果为false
4、赋值运算符 =
??对象可以用赋值运算符 = 进行赋值。如果将赋值运算符重载为复数类的函数成员,其代码如下:
Complex & Complex::operator =(Complex c)
{
real = c.real; image = c.image;
return *this; //返回赋值后当前对象的引用
}
??C++编译器通常会自动为类重载赋值运算符 “=”,程序员也可以自己编写赋值运算符函数,其功能很像拷贝构造函数。如果某个类的构造函数中动态分配了内存,除了需要为该类编写析构函数释放这些内存,程序员还要编写它的拷贝构造函数和重载赋值运算符 = ,其目的是进行深拷贝,为新建对象或别赋值对象动态再分配同样多的内存。??
??示例:
??Complex c1(1.3),c2;
??c2 = c1;c2.Show(); //显示c2为1+3i
5、右移运算符 >> 和左移运算符 <<
??为类重载右移和左移运算符是为了直接使用cin和cout指令来输入和输出对象。这里注意只能将右移运算符和左移运算符定义为类外的友元函数。
friend istream & operator >>(istream &is,Complex &c)
friend ostream & operator <<(ostream &os,const Complex &c); //在类中声明友元函数
//下面为函数实现部分
istream & operator >>(istream &is,Complex &c) // 键盘依次输入复数的实部和虚部
{
is >> c.real >>c.image;
return is;
}
ostream & operator <<(ostream &os,const Complex &c) //显示器上显示复数
{
os << c.real << "+" << c.image <<"i";
return os;
}
??示例:
? Complex obj;
? cin >>obj; //输入:3 5 [回车]
cout <<obj <<endl; //显示:3+5i
6、运算符重载的几点语法细则
??1) 除了条件运算符"?:"、sizeof运算符、成员运算符"."、指针运算符"*和作用域运算符“::”这五个运算符。C++其他运算符均可以被重载。
??2)重载后,运算符的优先级和结核性不会改变。
??3)重载后,运算符的操作数个数不能改变,同时至少有一个操作数是类类型。
??4) 重载后,运算符的含义应与原运算符相似,否则会给使用者造成困惑。