在派生类的友元函数ostream中调用另一个类的变量

时间: 2023-06-10 22:08:09 浏览: 41
可以通过在派生类中定义一个函数来实现。该函数可以访问基类和其他类的变量,并将它们输出到流中。 例如,假设有一个基类Person和一个派生类Student,另外还有一个类School。我们想要在Student类中定义一个友元函数,将Student对象的信息和School对象的信息输出到流中。 代码示例: ```c++ #include <iostream> using namespace std; class School { private: string schoolName; public: School(string name): schoolName(name) {} friend ostream& operator<<(ostream& os, const School& sch) { os << "School name: " << sch.schoolName << endl; return os; } }; class Person { protected: string name; int age; public: Person(string n, int a): name(n), age(a) {} }; class Student : public Person { private: int grade; public: Student(string n, int a, int g): Person(n, a), grade(g) {} friend ostream& operator<<(ostream& os, const Student& stu); }; ostream& operator<<(ostream& os, const Student& stu) { os << "Name: " << stu.name << endl; os << "Age: " << stu.age << endl; os << "Grade: " << stu.grade << endl; os << School("ABC"); // School对象作为参数传递给运算符函数 return os; } int main() { Student s("Tom", 18, 90); cout << s; // 输出Student对象的信息和School对象的信息 return 0; } ``` 在派生类Student中定义了一个友元函数operator<<,该函数将Student对象的信息和School对象的信息输出到流中。在函数体中,我们可以使用基类Person和其他类School的成员变量,并将它们输出到流中。注意,School对象作为参数传递给运算符函数,因为该函数不是School的成员函数,不能直接访问School对象的成员变量。在main函数中,我们创建了一个Student对象s,并将其输出到流中。运行程序,输出如下: ``` Name: Tom Age: 18 Grade: 90 School name: ABC ```

相关推荐

最新推荐

C++中的friend友元函数详细解析

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数...

C++运算符重载 成员函数与友元函数详解

以下是对C++运算符重载 成员函数与友元函数进行了介绍,需要的朋友可以过来参考下

Python项目自动化多服务器部署的工具

essay是我们团队在过去两年Python项目持续部署上经验的总结,核心功能是打包和多Server部署。这个工具的主要功能是简化从开发到部署的流程,方便服务器的扩展。除了打包和部署功能之外,essay还提供了其他的工具,在后面的接口描述中有详细介绍。 essay是基于Fabric开发,在使用上依赖于pypi Server和github/Gitlab。 这里使用自己搭建的pypiserver作为pypi server,github作为代码仓库。 安装essay: pip install essay github上创建项目:essay_demo_webpy 创建项目。终端上执行: es create essay_demo_webpy ,根据提示输入你新创建的git仓库地址,回车完毕你会发现你的github上已经有了初始化好的一个项目结构 打包项目。此时你可以在本地的essay_demo_webpy目录下执行: fab -l 命令查看哪些命令可用。然后执行 fab build.build 命令,会帮你打包成tar的源码包,并添加版本后缀,如:essay_demo_webpy-3.

STM32单片机FPGA毕设电路原理论文报告电梯升降的PLC控制设计

STM32单片机FPGA毕设电路原理论文报告电梯升降的PLC控制设计本资源系百度网盘分享地址

docopt-0.6.2.tar.gz

py依赖包

信息系统集成管理工程项目师必考重点内部资料.doc

信息系统集成管理工程项目师必考重点内部资料.doc

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

扎实基础工具:Maya在二维动画中的应用

# 1. Maya简介 ## 1.1 Maya软件概述 Maya是Autodesk公司推出的一款专业三维动画制作软件,被广泛应用于影视、游戏、动画等领域。它拥有强大的建模、动画、渲染等功能,是影视特效行业的主流软件之一。 ## 1.2 Maya在动画制作中的应用领域 Maya在动画制作中的应用非常广泛,可以用于制作影视特效、三维动画、角色动画、游戏动画等。其丰富的工具和功能使得动画制作更加高效和精确。 ## 1.3 Maya在二维动画制作中的优势 虽然Maya主打三维动画制作,但在二维动画制作中也有独特的优势。通过Maya的工具和功能,可以实现丰富多彩的二维动画效果,为动画制作带来

一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。 输入格式: 输入在一行中给出32位二进制字符串。 输出格式: 在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。 输入样例: 11001100100101000001010101110010 输出样例: 204.148.21.114做题

好的,这是一个简单的二进制转十进制的问题。以下是一个C++代码示例,可以实现该功能: ```cpp #include <iostream> #include <bitset> // 二进制转十进制需要使用bitset库 using namespace std; int main() { string binary; cin >> binary; // 将二进制字符串转换为bitset类型 bitset<32> bits(binary); // 依次输出四个字节的十进制数 cout << bits.to_ulong() >> 24 << "

工程项目预算与管理讲义.doc

工程项目预算与管理讲义.doc