纤维Fibre 2023-01-29 20:40 采纳率: 64.3%
浏览 14
已结题

一个带有以类对象为成员的类怎么重载<<才能显示对象成员的信息?

我分别在person与student类中都以友元函数重载了<< 期望看到的结果是当进行到cout<<stu.teacher时自动调用person类中的<<重载函数,可是却显示<<不能作用于person类(VS报的),而单独调用却可以。
想请问问什么会出现这种错误以及如何补救。
#include<iostream>
using namespace std;
class person {
    string name;
public:
    person(string n) :name(n) {};
    friend ostream& operator<<(ostream& os, person& per);
};
class student :public person {
    person teacher;
    int score;
public:
    student(string n, string n_teacher, int s) 
        :person(n), teacher(n_teacher), score(s) {};
    
    friend ostream& operator<<(ostream& os, student& stu);
};
ostream& operator<<(ostream& os, person& per)
{
    os<< "name:" << per.name << endl;
    return os;
}

ostream& operator<<(ostream& os, student& stu)
{
    os << "the student:" << endl;
    os << stu.name;//父类私有成员对子类不可见,此语句也无法实现。
    os << "score:" << stu.score << endl;
    os >> stu.teacher;//我明明在person类里定义了友元函数重载<<了,可这里还是不对。
    return os;
}
int main()
{
    student s1("Zhang San", "Li Si", 98);
    cout << s1;//不可行
    person p1("ff");//可行
    cout << p1;
    return 0;
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-01-29 22:05
    关注
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月2日
  • 修改了问题 1月29日
  • 创建了问题 1月29日

悬赏问题

  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误