设计与实现Person类及其派生类Teacher、Doctor和TeachDoc
"设计一个基于面向对象编程的人员类person,包括人员编号和姓名,并从该类派生出教师类teacher、医生类doctor以及教师医生类teachdoc。使用虚基类来处理多重继承,同时在主函数中进行实例化和测试。" 在这个程序中,我们首先定义了一个基础类`person`,它包含两个数据成员:`int num`表示人员编号,`string name`表示姓名。类`person`还提供了构造函数来初始化这些数据成员,并有一个`show()`成员函数用于显示人员的基本信息。 接着,我们派生出两个子类`teacher`和`doctor`,它们都使用`virtual`关键字来继承`person`,这是因为我们将要创建一个既是教师又是医生的`teachdoc`类,需要避免继承上的二义性。`teacher`类增加了一个数据成员`int tage`表示教龄,而`doctor`类增加了一个数据成员`string department`表示所在科室。这两个子类也各自提供了构造函数和`show()`函数,以展示它们特有的信息。 为了表示既是教师又是医生的`teachdoc`类,我们从`teacher`和`doctor`两个类进行多重继承。`teachdoc`类还包含了一个新的数据成员`double wage`表示工资。它的构造函数接收所有父类的数据成员以及自身的`wage`,并且调用父类的构造函数进行初始化。同样,`teachdoc`类也重写了`show()`函数,以便显示所有相关的信息。 在`main()`函数中,我们创建了一个`teachdoc`类型的对象,用以测试这个类的功能。这通常会涉及输入适当的参数,比如人员编号、姓名、教龄、科室和工资,然后调用`show()`函数来打印这些信息。这样的设计使得代码具有良好的结构,易于扩展和维护,同时也符合面向对象编程的原则,即封装、继承和多态。通过使用虚基类,我们成功地解决了多继承时可能出现的问题,确保了代码的正确性和效率。
#include "string"
using namespace std;
class person
{public:
person(int n,string nam){num=n;name=nam;}
void show()
{cout<<"人员编号:"<<num<<endl;
cout<<"姓名:"<<name<<endl;
}
protected:
int num; //人员编号
string name; //姓名
};
class teacher:virtual public person
{public:
teacher(int n,string nam,int t):person(n,nam),tage(t){}
void show()
{cout<<"人员编号:"<<num<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"教龄:"<<tage<<endl;
}
protected:
int tage; //教龄
};
class doctor:virtual public person
{public:
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构