运算符的连续使用(链式编程)需要注意重载函数的返回值设置。
加号运算符重载
两种实现方式:
1.成员函数重载
Person operator+(Person &p){ }
2.全局函数重载
Person operator(Person &p1,Person&p2)
注意:1.两种方式都可以利用本质运行,也可以使用简化后的 p1+p2 。
2.内置数据类型运算符不可改变。
左移运算符重载
左移运算符<<的重载主要是为了输出自定义数据类型的方便。
根据使用习惯,左移运算符重载通常以全局函数定义而不以成员函数定义。原因如下:
class Person {
public: 成员函数的弊端:
void operator<<(ostream &cout){ 1.这种形式的 p.operator<<(cout)简化后的形式是
cout<<A<<endl<<B<<endl; p<<cout 的形式,与期望相反。
} 2.这种形式不支持链式传递,即
private: cout<<p<<p1<<endl<<"We are the world";
int A; 因为在ostream &cout传递过程中,成员函数
int B; 重载依赖p1而不能单独使用。
}
由上可知,左移运算符重载以全局函数进行。(通过友元来配合私有权限)
本质形式实例: ostream &operator (ostream out,Person &p){ return out}