定义一个基类“Role”,类内有数据成员姓名,年龄,性别,有对各数据成员进行读写的函数getXXX()和setXXX(),有一个虚函数display(),该函数显示姓名,年龄,性别等数据成员的值,同时类内至少定义两个构造函数。 从Role类派生出一个“Employee”类,该类具有Role类的所有成员(构造函数除外),并扩展数据成员ID (职工编号)和salary(薪资)。同样要有至少两个构造方法,并重新定义display()函数。 主函数内定义基类指针和派生类对象,并使基类指针指向派生类对象,通过该基类指针访问虚函数display()。
时间: 2024-03-02 12:52:23 浏览: 10
好的,我来为您解答这个问题。您可以参考下面的代码实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Role {
public:
Role() {}
Role(string name, int age, char gender) {
this->name = name;
this->age = age;
this->gender = gender;
}
string getName() { return name; }
int getAge() { return age; }
char getGender() { return gender; }
void setName(string name) { this->name = name; }
void setAge(int age) { this->age = age; }
void setGender(char gender) { this->gender = gender; }
virtual void display() {
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
cout << "Gender: " << gender << endl;
}
protected:
string name;
int age;
char gender;
};
class Employee : public Role {
public:
Employee() {}
Employee(string name, int age, char gender, int id, double salary) : Role(name, age, gender) {
this->id = id;
this->salary = salary;
}
int getId() { return id; }
double getSalary() { return salary; }
void setId(int id) { this->id = id; }
void setSalary(double salary) { this->salary = salary; }
void display() {
Role::display();
cout << "ID: " << id << endl;
cout << "Salary: " << salary << endl;
}
private:
int id;
double salary;
};
int main() {
Role* role = new Employee("Tom", 30, 'M', 1001, 5000);
role->display();
delete role;
return 0;
}
```
在上面的代码中,我们首先定义了一个基类`Role`,包含数据成员`name`、`age`和`gender`,以及对应的读写函数`getXXX()`和`setXXX()`,还有虚函数`display()`用于显示类的数据成员信息。然后我们从`Role`类派生出一个`Employee`类,添加了两个新的数据成员`id`和`salary`,并重新定义了`display()`函数以显示`Employee`类的所有数据成员信息。
接着在`main()`函数中,定义了一个基类指针`role`,并用`Employee`类的对象初始化它。然后通过基类指针调用`display()`函数,由于`display()`是虚函数,因此会根据实际对象类型调用相应的函数,这里会调用`Employee`类的`display()`函数,输出`Employee`类的所有数据成员信息。
最后别忘了释放内存,我们使用了`new`运算符来创建对象,因此需要使用`delete`运算符来释放内存。