用两种方式分别实现一元操作符:前置++,前置--,后置++,后置--
重载为友元函数,解释为:operator op(object) 参数由参数表的object 提供。
重载为成员函数,解释为:Object.operator op()。
#include
using namespace std;
class Complex{
private:
int a;
int b;
friend Complex& operator++(Complex& c1);
friend Complex operator++(Complex& c1,int);
public:
Complex()
{
}
Complex(int a,int b)
{
this->a=a;
this->b=b;
}
//前置--成员函数
Complex operator--()
{
this->a--;
this->b--;
return *this;
}
//后置--成员函数
Complex operator--(int)
{
Complex temp;
temp=*this;
this->a--;
this->b--;
return temp;
}
void Cprint()
{
cout<
<<"+"<<<"i"<
注意后置操作符比前置而言,参数中多出一个int占位符。 一般来说重载使用类成员函数方式,但当重载<<时,我们发现<<属于ostream类,我们无法修改。遇到这种情况时,我们使用友元函数的方式重载。
#include
using namespace std;
class Complex{
private:
int a;
int b;
friend ostream& operator<<(ostream &out,Complex &c1);
public:
Complex()
{
}
Complex(int a,int b)
{
this->a=a;
this->b=b;
}
};
ostream& operator<<(ostream &out,Complex &c1)
{
cout<
<<"+"<
<<"i"<
流操作符<<和>>,常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。cout << "hello" 的返回值仍然是个流引用。 可选的其它方案包括:返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受。
对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。