设计与实现Person类及其派生类Teacher、Doctor和TeachDoc

需积分: 50 10 下载量 135 浏览量 更新于2024-09-06 1 收藏 1KB TXT 举报
"设计一个基于面向对象编程的人员类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()`函数来打印这些信息。这样的设计使得代码具有良好的结构,易于扩展和维护,同时也符合面向对象编程的原则,即封装、继承和多态。通过使用虚基类,我们成功地解决了多继承时可能出现的问题,确保了代码的正确性和效率。