多重继承的应用《教师类和干部类》

在上一篇博客中介绍了多重继承,虽然多重继承在实际的运用中用的不多,但是还是通过几个例子说明多重继承

实例:教师类和干部类派生出教师干部类

分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求: 

(1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。 
(2)在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。 
(3)对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。 
(4)在类体中声明成员函数,在类外定义成员函数。 
(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。

程序继承图



程序代码

#include <iostream>
#include <string>

using namespace std;

class Teacher//教师类
{
public:
    //构造函数
    Teacher(string Name, int Age, char Sex, string Addr, int Tel, string Title);
    void display();//显示教师信息

protected:
    string name;//姓名
    int age;//年龄
    char sex;//性别
    string addr;//地址
    int tel;//电话
    string title;//职称  
};


//构造函数
Teacher::Teacher(string Name, int Age, char Sex, string Addr, int Tel, string Title):
    name(Name), age(Age), sex(Sex), addr(Addr), tel(Tel), title(Title){}


void Teacher::display()//显示教师信息
{
    cout<<"姓名:"<<name<<endl;
    cout<<"年龄:"<<age<<endl;
    cout<<"性别:"<<sex<<endl;
    cout<<"地址"<<addr<<endl;
    cout<<"电话:"<<tel<<endl;
    cout<<"职称:"<<title<<endl;
}


class Cadre//干部类
{
public:
   //构造函数
    Cadre(string Name, int Age, char Sex, string Addr, int Tel, string Pos);
    void show1();//显示干部信息

protected:
    string name;//姓名
    int age;//年龄
    char sex;//性别
    string addr;//地址
    int tel;//电话
    string post;//职务
};


//构造函数
Cadre::Cadre(string Name, int Age, char Sex, string Addr, int Tel, string Post):
    name(Name), age(Age), sex(Sex), addr(Addr), tel(Tel), post(Post){}


//显示干部信息
void Cadre::show1()
{
    cout<<"姓名:"<<name<<endl;
    cout<<"年龄:"<<age<<endl;
    cout<<"性别:"<<sex<<endl;
    cout<<"地址"<<addr<<endl;
    cout<<"电话:"<<tel<<endl;
    cout<<"职务:"<<post<<endl;
}

//Teacher类和Cadre类派生出新的类Teacher_Cadre类
class Teacher_Cadre : public Teacher, public Cadre
{
public:
    //构造函数
    Teacher_Cadre(string Name, int Age, char Sex, string Addr, int Tel, string Title, string Post, double Wages);
    void show();//显示信息

protected:
    double wages;//工资
};

//构造函数
Teacher_Cadre::Teacher_Cadre(string Name, int Age, char Sex, string Addr, int Tel, string Title, string Post, double Wages):
Teacher(Name, Age, Sex, Addr, Tel, Title), Cadre(Name, Age, Sex, Addr, Tel, Post), wages(Wages){}

//显示Teacher_Cadre类中的信息
void Teacher_Cadre::show()
{
    display();//调用Teacher类中的display()函数显示信息
    cout<<"职务:"<<Cadre::post<<endl;//输出职务
    cout<<"工资:"<<wages<<endl;//输出工资
}


void main()
{
    Teacher_Cadre T_C("王丽", 50, 'f', "135 Beijing Road,Shanghai", 02161234567,  "president", "prof.", 1534.5);
    T_C.show();

    system("pause");
}


执行结果
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值