简答题 定义一个基类“Role”,类内有数据成员姓名,年龄,性别,有对各数据成员进行读写的函数getXXX()和setXXX(),有一个虚函数display(),该函数显示姓名,年龄,性别等数据成员的值,同时类内至少定义两个构造函数。 从Role类派生出一个“Employee”类,该类具有Role类的所有成员(构造函数除外),并扩展数据成员ID (职工编号)和salary(薪资)。同样要有至少两个构造方法,并重新定义display()函数。 主函数内定义基类指针和派生类对象,并使基类指针指向派生类对象,通过该基类指针访问虚函数display()。
时间: 2024-03-01 12:52:48 浏览: 63
以下是基类`Role`和派生类`Employee`的定义及实现,以及主函数内的使用方法:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Role {
protected:
string name;
int age;
char gender;
public:
Role() { // 默认构造函数
name = "unknown";
age = 0;
gender = 'M';
}
Role(string n, int a, char g) { // 有参数的构造函数
name = n;
age = a;
gender = g;
}
void setName(string n) { name = n; }
void setAge(int a) { age = a; }
void setGender(char g) { gender = g; }
string getName() const { return name; }
int getAge() const { return age; }
char getGender() const { return gender; }
virtual void display() const { // 虚函数
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
cout << "Gender: " << gender << endl;
}
};
class Employee : public Role {
private:
string ID;
double salary;
public:
Employee() : Role() { // 默认构造函数
ID = "unknown";
salary = 0;
}
Employee(string n, int a, char g, string i, double s) : Role(n, a, g) { // 有参数的构造函数
ID = i;
salary = s;
}
void setID(string i) { ID = i; }
void setSalary(double s) { salary = s; }
string getID() const { return ID; }
double getSalary() const { return salary; }
void display() const override { // 重载虚函数
Role::display(); // 调用基类的display()函数
cout << "ID: " << ID << endl;
cout << "Salary: " << salary << endl;
}
};
int main() {
Role* ptr;
Employee e("Tom", 25, 'M', "001", 5000); // 创建派生类对象
ptr = &e; // 指针指向派生类对象
ptr->display(); // 调用虚函数
return 0;
}
```
运行结果:
```
Name: Tom
Age: 25
Gender: M
ID: 001
Salary: 5000
```
阅读全文