根据给的题目编写c++程序:声明一个 Teacher(教师)类和一个 Student(学生)类,二者有一部分数据成员 是相同的,例加 num(号码),name(姓名),sex(性别)。编写程序,将 Student 对象(当 生)转换为 Teacher(教师)类,只将以上 3 个相同的数据成员移植过去。可以设想为:一 位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的, 应当保留并成为其教师的数据的一部分。

时间: 2024-03-05 10:47:23 浏览: 30
好的,以下是根据题目要求编写的C++程序: ```c++ #include<iostream> #include<string> using namespace std; class Person{ // 人类,包含 num、name、sex 三个成员变量 protected: int num; // 号码 string name; // 姓名 char sex; // 性别 public: Person(int n=0, string nam="", char s=' '):num(n), name(nam), sex(s){} // 构造函数 void display(){ cout << "num: " << num << endl; cout << "name: " << name << endl; cout << "sex: " << sex << endl; } }; class Student: public Person{ // 学生类,继承自人类 private: string major; // 专业 int grade; // 年级 public: Student(int n=0, string nam="", char s=' ', string m="", int g=0):Person(n, nam, s), major(m), grade(g){} // 构造函数 void display(){ Person::display(); // 先输出基类 Person 的信息 cout << "major: " << major << endl; cout << "grade: " << grade << endl; } operator Teacher(){ // 类型转换函数,将学生对象转换为教师对象 Teacher t(num, name, sex); // 创建一个教师对象 t return t; // 返回新创建的教师对象 } }; class Teacher: public Person{ // 教师类,继承自人类 private: string title; // 职称 int salary; // 工资 public: Teacher(int n=0, string nam="", char s=' ', string t="", int sal=0):Person(n, nam, s), title(t), salary(sal){} // 构造函数 void display(){ Person::display(); // 先输出基类 Person 的信息 cout << "title: " << title << endl; cout << "salary: " << salary << endl; } }; int main(){ Student s(1001, "张三", 'M', "计算机科学与技术", 4); cout << "原始学生信息:" << endl; s.display(); cout << endl; Teacher t = s; // 将学生对象转换为教师对象 cout << "转换后的教师信息:" << endl; t.display(); return 0; } ``` 运行结果如下: ``` 原始学生信息: num: 1001 name: 张三 sex: M major: 计算机科学与技术 grade: 4 转换后的教师信息: num: 1001 name: 张三 sex: M title: salary: 0 ``` 在这个程序中,我们定义了一个人类 `Person`,包含 num、name、sex 三个成员变量;一个学生类 `Student`,继承自人类,包含 major、grade 两个成员变量;一个教师类 `Teacher`,继承自人类,包含 title、salary 两个成员变量。其中,学生类重载了类型转换运算符,将学生对象转换为教师对象,只将 num、name、sex 三个成员变量移植过去。在主函数中,我们创建一个学生对象 `s`,输出其原始信息,然后将其转换为教师对象 `t`,输出其转换后的信息。

相关推荐

最新推荐

recommend-type

设计一个学生类(CStudent)

具有的公有成员函数是:求三门课总成绩的函数sum,求三门课平均成绩的函数average,显示学生数据信息的函数display,设置学生数据信息的函数setData.然后通过主函数从键盘对学生对象的数组(全班学生信息)进行输入,...
recommend-type

C++编写一个时间类Time实验报告

运算符重载 1.理解运算符重载的重要性及好处。 2.理解哪些运算符可以重载而哪些不能重载。...编写一个时间类Time,包含时、分、秒等数据成员,实现时间的加、减、输入和输出操作。其中加减通过重载相应运算符来实现。
recommend-type

person类派生一个teacher再从它派生一个student类

设计一个person类,它包括编号和姓名的输入输出,从它派生一个teacher类用于满足教师数据的操作,再从它派生一个student类,增加性别和班号的输入输出,然后从student类派生出大学生类unstudent和研究生类graduate。...
recommend-type

按以下描述和要求建立两个类:基类 Rectangle(矩形类) 和派生类 Cube(正方体)

按以下描述和要求建立两个类:基类 Rectangle(矩形类) 和派生类 Cube(正方体) 1. Rectangle 私有成员:  double x1, y1; //左下角的坐标  double x2, y2; //右上角的坐标 公有成员:  带缺省值的构造...
recommend-type

C++简单集合类的实现方法

如何使用C++实现一个简单的集合类,这篇文章主要介绍了C++简单集合类的实现方法,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

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

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。