在上一篇博客中介绍了多重继承,虽然多重继承在实际的运用中用的不多,但是还是通过几个例子说明多重继承
实例:教师类和干部类派生出教师干部类
分别定义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");
}
执行结果