计算机小混子 2022-04-18 22:25 采纳率: 100%
浏览 33
已结题

关于C++左移运算符重载,为什么我可以把cout改成out,改了之后下面调用还能用cout输出


#include <iostream>
using namespace std;
class Person
{
public:
    int m_A;
    int m_B;
    
};
ostream &operator<<(ostream &out,Person& p)
{
    out << "m_A=" << p.m_A << " m_B=" << p.m_B;
    return out;
}
void test01()
{
    Person p;
    p.m_A = 10;
    p.m_B = 10;
    cout << p << endl;
}
int main()
{
    test01();
    system("pause");
}
  • 写回答

4条回答 默认 最新

  • bostonAlen 2022-04-18 23:11
    关注

    c++机制就是这样规定的,当你重载了自定义的类型的操作符<<,就意味着你可以使用cout输出自定义的类型。
    假如这里你不实现ostream &operator<<(ostream &out,Person& p)这个函数,你就无法使用cout << p << endl;这句代码
    另外你的out << "m_A=" << p.m_A << " m_B=" << p.m_B;可以随意更改成喜欢的形式,例如out << "m_A:" << p.m_A << " m_B:" << p.m_B;
    c++通过这样的机制让我们可以更灵活的去实现自定义类型的输出,
    ostream &out在这里是输出流,你可以简单了解,不用去深究,知道重载和怎么去写重载就够了,
    传递的参数和返回的参数为什么是引用、以及我随便给你一个类型怎么去写重载<<运算符的函数,而且我们为什么常常会将这样的函数声明为friend 友元,这才是你该关注的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月18日