PTA-6-1 多重继承

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

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

    在这里描述类和函数接口:
    #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;
    }

    这道题没什么难度,注意多重继承要加类名前缀指明用的是哪个类的数据就好

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值