第十二周任务一(多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部))

来源:互联网 发布:中川clarence知乎 编辑:程序博客网 时间:2024/05/16 16:47

【题目】(教材P394习题9)分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:
1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。
2)在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)
3)对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。
4)在类体中声明成员函数,在类外定义成员函数。
5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。

(有高校中,有行政职务的教师,称为双肩挑。我挑过,挑不动,就撂了一头,成了现在这个样子。)

 

【简析】本题中的关键是在两个基类中有同名的数据成员,产生了由多重继承引起的二义性问题。在派生类中,需要通过类名::成员名"的形式解决。这是解决这类问题的一种办法。

 

#include<string>#include <iostream>using namespace std;class Teacher      //声明老师类{public:Teacher(string nam,int a,char s,string tit,string ad,string t);void display();protected:string name;int age;char sex;string title;string addr;string tel;};//老师类成员函数的定义Teacher::Teacher(string nam,int a,char s,string tit,string ad,string t):name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){ }void Teacher::display(){cout<<"name:"<<name<<endl;cout<<"age"<<age<<endl;cout<<"sex:"<<sex<<endl;cout<<"title:"<<title<<endl;cout<<"address:"<<addr<<endl;cout<<"tel:"<<tel<<endl;}//声明干部类class Cadre{public:Cadre(string nam,int a,char s,string p,string ad,string t);void display();protected:string name;int age;char sex;string post;string addr;string tel;};//干部类成员函数的定义Cadre::Cadre(string nam,int a,char s,string p,string ad,string t):name(nam),age(a),sex(s),post(p),addr(ad),tel(t){}void Cadre::display(){cout<<"name:"<<name<<endl;cout<<"age:"<<age<<endl;cout<<"sex:"<<sex<<endl;cout<<"post:"<<post<<endl;cout<<"address:"<<addr<<endl;cout<<"tel:"<<tel<<endl;}//声明多重公用派生类-教师兼干部类class Teacher_Cadre:public Teacher,public Cadre  {public:Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w);void show( );private:float wage;  };Teacher_Cadre::Teacher_Cadre(string nam,int a,char s,string t,string p,string ad,string tel,float w): Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w) {}void Teacher_Cadre::show( ){Teacher::display();    //指定域cout<<"post:"<<Cadre::post<<endl; //指定域cout<<"wages:"<<wage<<endl;}int main( ){Teacher_Cadre te_ca("Wang-li",50,'f',"prof.","president","135 Beijing Road,Shanghai","(021)61234567",1534.5);te_ca.show( );system("pause");return 0;}


小结:多重继承引起的二义性问题可用基类名来限定,如Teacher::display() 1,如果在派生类中通过派生类成员函数访问基类的同名成员,可不写对象名 2,两个基类和派生类都有同名成员时如te_ca.show( ),在主函数调用的是派生类的成员函数,原因是基类的同名成员被派生类覆盖

注意:不同的成员函数只有在函数名和参数个数相同,类型相匹配的情况下才发生同名覆盖,如果只有参数名相同而参数不同,不会发生同名覆盖,而属于函数重载

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手上长了个鸡眼怎么办 6岁儿童手指脱皮怎么办 手指骨折后关节僵硬怎么办 手指外伤后关节肿大僵硬怎么办 胳膊骨折了手肿怎么办 耳朵被肘了耳鸣怎么办 耳朵鼓膜外显的怎么办 耳膜破了怎么办为好 耳朵的鼓膜破了怎么办 被打耳鼓膜穿孔怎么办 两只耳朵嗡嗡响怎么办 耳朵长了个脓包怎么办 胸一个大一个小怎么办 把耳朵掏出血了怎么办 掏耳朵戳出血了怎么办 耳朵戳伤流血了怎么办 耳朵挖破出血了怎么办 耳朵让耳屎堵了怎么办 手被牙齿划破了怎么办 耳朵掏伤了很痛怎么办 掏伤耳朵发炎了怎么办 耳朵被掏发炎了怎么办 打的耳洞化脓了怎么办 打了耳洞流脓了怎么办 打了耳洞发炎怎么办 打了耳洞化脓了怎么办 3岁宝宝耳朵流脓怎么办 耳朵里面是湿的怎么办 耳朵里天天很痒怎么办 身上长湿疹很痒怎么办 嗓子干疼耳朵痒怎么办 上火了耳朵嗡嗡响怎么办 太阳凹颧骨外扩怎么办 4岁儿童脊柱侧弯怎么办 瘦的人得多囊怎么办 智齿刚长出来该怎么办 宝宝耳朵睡尖了怎么办 睡觉压的耳朵疼怎么办 月子里奶水越来越少怎么办 月子里生气回奶了怎么办 儿童疫苗本丢了怎么办