C++左移运算符重载
通过重载使得左移运算符可以输出自定义数据类型。
在类中定义成员函数实现不了左移运算符重载。
要在全局函数中实现左移运算符重载。
注:左移运算符的类型是ostream
- 过程如下:
//新建person类
class Person {
public:
Person(int a, int b)//用于输出值
{
this->m_A = a;
this->m_B = b;
}
private:
int m_A;
int m_B;
- 定义全局重载函数,输出person类中的值
此种结构只能在左移运算符后输出一个值
cout<<p;
//对于不清楚类型的返回值可以先设置成为void,
//等到定义完毕后系统将会自动提示其返回值类型
void operator<<(ostream& cout, Person& p) {
cout << "a:" << p.m_A << " b:" << p.m_B;
}
//此时还无法调用,必须进行下一步声明为友元函数
- 声明为友元
friend void operator<<(ostream& cout, Person& p);
- 如何能够像以前的输出形式一样,实现连续输出呢?
我们可以更改一下重载函数,使其能够链式输出
cout<<p<<endl;
- 定义重载函数
//返回值必须为ostream&类型
//形参的名字无所谓,不用必须是cout
ostream& operator<<(ostream& out, Person& p) {
out << "a:" << p.m_A << " b:" << p.m_B;
return out;
}
- 声明为友元
friend ostream& operator<<(ostream& out, Person& p);