3、派生与继承:虚继承
(a) 设计 Employee 类,包括:
两个保护型数据成员:string name和int age,分别表示姓名和年龄
一个带两个形参的构造函数Employee(const string & name, int age),用于初始化数据成员
成员函数void Display(),输出所有信息(即姓名和年龄)
(b) 在 Employee 基础上定义派生类(以虚继承方式)Saleman,包括:
新增保护型数据成员:int sales,表示销售额
一个带三个形参的构造函数Saleman(const string & name, int age, int sales)
成员函数void Display(),输出所有信息(即姓名、年龄和销售额)
(c) 在 Employee 基础上定义派生类(以虚继承方式)Manager,包括:
新增保护型数据成员:int members,表示管理的人数
一个带三个形参的构造函数Manager(const string & name, int age, int members)
成员函数void Display(),输出所有信息(即姓名、年龄和管理人数)
(d) 在 Saleman 和 Manager 基础上定义派生类SaleManager,包括:
一个带四个形参的构造函数
SaleManager(const string & name, int age, int sales, int members)
成员函数voidDisplay(),输出所有信息(即姓名、年龄、管理人数和销售额)
实现这四个类,并在主函数中测试:创建一个SaleManager,姓名: Zhang San, 年龄: 32,
销售额: 128, 管理人数: 8。在屏幕上输出该销售经理的相关信息。
(程序取名为hw13_03.cpp)
#include <iostream>
#include <string>
using namespace std;
class Employee
{
public:
Employee(const string & name,int age) {
this->name = name;
this->age = age;
}
void Display() {
cout<< "Name: "<<name<<endl;
cout<< "Age: "<<age<<endl;
}
protected:
string name;
int age;
};
class Saleman: virtual public Employee
{
public:
Saleman(const string & name, int age, int sales):
Employee(name,age) {
this->sales = sales;
}
void Display() {
Employee::Display();
cout<< "Sales: "<<sales<<endl;
}
protected:
int sales;
};
class Manager: virtual public Employee
{
public:
Manager(const string & name, int age, int members):
Employee(name,age) {
this->members = members;
}
void Display() {
Employee::Display();
cout<< "Members: "<<members<<endl;
}
protected:
int members;
};
class SaleManager: public Saleman, public Manager
{
public:
SaleManager(const string & name, int age, int sales, int members):
Employee(name,age),
Saleman(name,age,sales),
Manager(name,age,members) {}
void Display() {
Saleman::Display();
cout<< "Members: "<<members<<endl;
}
};
int main()
{
SaleManager x("Zhang San", 32, 128, 8);
x.Display();
return 0;
}
Post Views: 7