分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)类,要求:
- 在两个基类中都包含姓名,年龄,性别,地址,电话等数据成员。
- 在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务)。在Teacher_Cadre类中还包含数据成员wages(工资)。
- 对两个基类中的姓名、年龄、性别、地址、电话等数据成员使用同样的名字,在引用这些数据成员时,指定作用域。
- 在类体中声明成员函数,在类体外定义成员函数。
- 在派生类Teacher_Cadre的成员函数show中调用Teacher类的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务和工资。
-
函数接口定义:
在这里描述类和函数接口: #include <iostream> #include <string> using namespace std; class Teacher{ protected: string name; int age; char gender; string addr; string phone; string title; public: Teacher(){} Teacher(string name,int age,char gender, string addr,string phone,string title); void display(); }; class Cadre{ protected: string name; int age; char gender; string addr; string phone; string post; public: Cadre(){} Cadre(string name,int age,char gender, string addr,string phone,string post); void display(); }; class Teacher_Cadre:public Teacher,public Cadre { protected: int wages; public: Teacher_Cadre(string name,int age,char gender, string addr,string phone,string title, string post,int wages); void show(); };
为简化,string类型的成员都是不带空格的字符串。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子: int main() { int mode; string name; int age; char gender; string addr; string phone; string title; string post; int wages; Teacher *t; Cadre *c; Teacher_Cadre *tc; cin>>mode; cin>>name>>age>>gender>>addr>>phone>>title>>post>>wages; switch(mode) { case 1: t = new Teacher(name,age,gender,addr,phone,title); t->display(); cout<<endl; break; case 2: c = new Cadre(name,age,gender,addr,phone,post); c->display(); cout<<endl; break; case 3: tc = new Teacher_Cadre(name,age,gender,addr,phone,title,post,wages); tc->show(); cout<<endl; } return 0; } /* 请在这里填写答案 */
输入样例1:
在这里给出一组输入。例如:
1 张三 23 M 成都某大学软件工程专业 13888888888 讲师 教务科长 5000
注意:性别的取值为'F'或'M',其中'F'表示女性,'M'表示男性。
输出样例1:
在这里给出相应的输出。例如:
name:张三,age:23,gender:男,addr:成都某大学软件工程,phone:13888888888,title:讲师
答案代码如下:
Teacher::Teacher(string name,int age,char gender, string addr,string phone,string title) //一定不要忘记类外实现的成员函数要加类名前缀 { this->name=name; //形参和实参同名,用this指针指明 this->age=age; this->gender=gender; this->addr=addr; this->phone=phone; this->title=title; } void Teacher::display() { cout<<"name:"<<name<<",age:"<<age<<",gender:"<<(gender=='M'?"男":"女")<<",addr:"<<addr<<",phone:"<<phone<<",title:"<<title; //if(gender=='M') cout<<"男"; else cout<<"女"; } //这里对于性别的输出,可以是用if语句判断输出,我偷懒简化代码用了个三目运算符 Cadre::Cadre(string name,int age,char gender, string addr,string phone,string post) { this->name=name; this->age=age; this->gender=gender; this->addr=addr; this->phone=phone; this->post=post; } void Cadre::display() { cout<<"name:"<<name<<",age:"<<age<<",gender:"<<(gender=='M'?"男":"女")<<",addr:"<<addr<<",phone:"<<phone<<",post:"<<post; // if(gender=='M') cout<<"男"; else cout<<"女"; } Teacher_Cadre::Teacher_Cadre(string name,int age,char gender, string addr,string phone,string title, string post,int wages) { this->Teacher::name=name; //因为是多重继承,会出现两个类有部分对象重名 this->Teacher::age=age; //所以要用类名前缀指明用的是哪个类的,不然编译器分不清的 this->Teacher::gender=gender; this->Teacher::addr=addr; this->Teacher::phone=phone; this->Teacher::title=title; this->Cadre::post=post; //注意区分,post是Cadre类的,加上类名前缀 this->wages=wages; } void Teacher_Cadre::show() { Teacher::display(); cout<<",post:"<<post<<",wages:"<<wages; }
这道题没什么难度,注意多重继承要加类名前缀指明用的是哪个类的数据就好