虚基类

126 阅读1分钟

设计一个虚基类 base,包含姓名、年龄及相关的成员函数。由他派生领导类 leader,新增职 务、部门及相关成员函数。在由 base 派生工程师类 engineer,新增职称、专业及相关成 员函数。最后由 leader 和 engineer 类共同派生出主任工程师 chairman。请编程实现这几 个类及他们之间的派生关系,并设计测试代码进行测试

#include <iostream>
#include <cstdlib>
using namespace std;

class base
{
protected:
    string name;
    int age;
public:
    base(string name1, int age1);

    virtual void show();
};
base::base(string name1, int age1)
{
    name = std::move(name1);
    age = age1;
}
void base::show()
{
    cout << "姓名:" << name << endl;
    cout << "年龄:" << age << endl;
}

class leader :virtual public base //领导类
{
protected:
    string post;//职务
    string dept;//部门
public:
    leader(string name1, int age1, string post1, string dept1);
    void show() override;
};
leader::leader(string name1, int age1, string post1, string dept1) :base(std::move(name1), age1)
{
    post = std::move(post1);
    dept = std::move(dept1);
}
void leader::show()
{
    cout << "领导类:" << endl;
    base::show();
    cout << "职务:" << post << endl;
    cout << "部门:" << dept << endl;
}

class engineer :virtual public base //工程师类
{
protected:
    string title;//职称
    string major;//专业
public:
    engineer(string name1, int age1, string title1, string major1);
    void show() override;
};
engineer::engineer(string name1, int age1, string title1, string major1) :base(std::move(name1), age1)
{
    title=std::move(title1);
    major = std::move(major1);
}
void engineer::show()
{
    cout << "工程师类:" << endl;
    base::show();
    cout << "职称:" << title << endl;
    cout << "专业:" << major << endl;
}

class chairman :public leader,public engineer//主任工程师类
{
public:
    chairman(const string& name1, int age1, string post1, string dept1, string title1, string major1);
    void show() override;
};
chairman::chairman(const string& name1, int age1, string post1, string dept1, string title1, string major1) :base(name1, age1), leader(name1, age1, std::move(post1), std::move(dept1)), engineer(name1, age1, std::move(title1), std::move(major1))
{

}
void chairman::show()
{
    cout << "主任工程师类:" << endl;
    base::show();
    cout << "职务:" << post << endl;
    cout << "部门:" << dept << endl;
    cout << "职称:" << title << endl;
    cout << "专业:" << major << endl;
}

int main()
{
    system("chcp 65001 > null");
    string leader_name , leader_post , leader_dept ;
    int leader_age ;
    cout << "请输入领导 姓名、年龄、职务、部门 :" ;
    cin >> leader_name >> leader_age >> leader_post >> leader_dept ;
    string engineer_name  , engineer_title , engineer_major ;
    int engineer_age ;
    cout << "请输入工程师 姓名、年龄、职称、专业 :" ;
    cin >> engineer_name >> engineer_age >> engineer_title >> engineer_major ;
    string chairman_name , chairman_post , chairman_dept , chairman_title , chairman_major ;
    int chairman_age ;
    cout << "请输入主任工程师 姓名、年龄、职务、部门、职称、专业:" ;
    cin >> chairman_name >> chairman_age >> chairman_post >> chairman_dept >> chairman_title >> chairman_major ;
    leader a(leader_name, leader_age, leader_post, leader_dept);
    engineer b(engineer_name, engineer_age, engineer_title, engineer_major);
    chairman c(chairman_name,chairman_age, chairman_post,chairman_dept, chairman_title, chairman_major);
    a.show();
    cout << endl;
    b.show();
    cout << endl;
    c.show();
    system("PAUSE");
    return 0;
}