定义一个基类“Role”,类内有数据成员姓名,年龄,性别,有对各数据成员进行读写的函数getXXX()和setXXX(),有一个虚函数display(),该函数显示姓名,年龄,性别等数据成员的值,同时类内至少定义两个构造函数。 从Role类派生出一个“Employee”类,该类具有Role类的所有成员(构造函数除外),并扩展数据成员ID (职工编号)和salary(薪资)。同样要有至少两个构造方法,并重新定义display()函数。 主函数内定义基类指针和派生类对象,并使基类指针指向派生类对象,通过该基类指针访问虚函数display()。
时间: 2024-03-02 20:52:16 浏览: 38
好的,我来为您解答这个问题。
首先,定义一个基类 Role,声明数据成员和成员函数:
```cpp
class Role {
protected:
std::string name;
int age;
char gender;
public:
Role() {}
Role(const std::string& n, int a, char g) : name(n), age(a), gender(g) {}
virtual void display() const {
std::cout << "Name: " << name << ", "
<< "Age: " << age << ", "
<< "Gender: " << gender << std::endl;
}
std::string getName() const { return name; }
int getAge() const { return age; }
char getGender() const { return gender; }
void setName(const std::string& n) { name = n; }
void setAge(int a) { age = a; }
void setGender(char g) { gender = g; }
};
```
接下来,从 Role 类派生出一个 Employee 类,添加新成员 ID 和 salary,并重新定义 display() 函数:
```cpp
class Employee : public Role {
private:
int id;
double salary;
public:
Employee() {}
Employee(const std::string& n, int a, char g, int i, double s)
: Role(n, a, g), id(i), salary(s) {}
Employee(const Role& r, int i, double s) : Role(r), id(i), salary(s) {}
void display() const override {
Role::display();
std::cout << "ID: " << id << ", "
<< "Salary: " << salary << std::endl;
}
};
```
最后,在主函数中创建基类指针和派生类对象,并使用基类指针调用虚函数 display():
```cpp
int main() {
Role* p = new Employee("Tom", 25, 'M', 1001, 5000.0);
p->display();
delete p;
return 0;
}
```
输出结果为:
```
Name: Tom, Age: 25, Gender: M
ID: 1001, Salary: 5000
```
阅读全文