源码先锋

源码先锋

C++知识点 32:左移运算符重载

admin 5 78

includeiostream
usingnamespacestd;
classPerson
{
friostreamoperator(ostreamcout,Personp);//全局函数友元化,使函数可以访问私有属性
public:
Person(){};
Person(inta,intb):m_A(a),m_B(b){}
private:
intm_A;
intm_B;
};
/*
问题:输出对象的元素,只能__Bl;
需求:直接输出coutp1l;(编译器不认这种运算)
解决:使用运算符重载
*/

//使用全局函数实现
//说明:是一个双目运算符,两边都是类,使用全局函数需要传2个参数
cout属于系统标准输出类ostream,系统类属性要求唯一,因此必须传本体,即ostream
p传Person(先拷贝,在使用)或者Person(直接传本体)都可以,但使用Person效率更高
ostreamoperator(ostreamcout,Personp)
{
cout"m_A="_A"m_B="_B;//属性私有化,不能访问,因此设置成友元函数
returncout;//与传参相同,返回值也要是本体
}
intmain()
{
Personp1(10,20);
coutp1l;
}
//说明:采用成员函数实现
//写法:Personoperator(ostreamcout);使用时候写法:p1cout
//不符合使用习惯,因此只能采用全局函数实现