C++重载 抽取运算符 <<

$ cat main.cpp

 /*
 * C++重载 抽取运算符 <<
 * 重载: 这个名字说得太专业,太玄乎,太不易理解.
 * 用白话解释一下吧. c++库 有一个 ostream 对象就 cout.
 * 这句话我就不解释了, 关于cout 搞 c++ 大家用过很多了次了. 反正就是用它向屏幕上打印东西.
 * 就好比说那是"太阳", 如果再问"太阳"是什么? 我没法继续说它"太阳"就是一个发光的盘子. 这样解释就不准确了.

 * ostream c++ 库已经写了很多代码了, 但是它也不认识Person 类, 打印不了Persion对象,
 * 我们要继续完善ostream 类对象,让它支持Persion 对象, 我们要完善的地方是那个运算符<<
 * 这就是我们要重载抽取运算符 <<

 * 当你听说你要完善C++的OStream 库函数, 是不是觉得很震惊? 其是也没有那么高大上,很简单的,下面就看看实例.
 * 你会了也不代表你就能发财了@_@
 */

#include <iostream>
using namespace std; //添加命名空间,否则会找不到ostream
class Person
{
    public: Person(const char *name,int age):_name(name),_age(age) { }
    friend ostream & operator << (ostream &out, Person &person); //声明友元则可以在类外访问该类的私有变量
    private:
            const char *_name;
            int _age;
};

//重载了抽取操作符 << ,使支持Persion 类型(白话是添加了<<打印persion变量功能)
//相当于扩充了抽取 << 操作符的功能, 它的左手侧是this 对象,右手侧是Person对象
ostream & operator << (ostream &out, Person &person)
{
    out << "name:"<<person._name << endl<<"age:"<<person._age<<endl;
    return out; //返回ostream 对象则可以支持连续调用
}
int main()
{
    Person person1("zhang", 30);
    Person person2("wang", 40);
    cout<<person1<<person2; // cout 就是一个ostream 类的对象
    return 0;
}

运行结果:

$ ./test_ostream
name:zhang
age:30
name:wang
age:40

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值