定义一个基类“Role”,类内有数据成员姓名,年龄,性别,有对各数据成员进行读写的函数getXXX()和setXXX(),有一个虚函数display(),该函数显示姓名,年龄,性别等数据成员的值,同时类内至少定义两个构造函数。 从Role类派生出一个“Employee”类,该类具有Role类的所有成员(构造函数除外),并扩展数据成员ID (职工编号)和salary(薪资)。同样要有至少两个构造方法,并重新定义display()函数。 主函数内定义基类指针和派生类对象,并使基类指针指向派生类对象,通过该基类指针访问虚函数display()。
时间: 2024-03-20 15:39:19 浏览: 70
gtest有对类成员函数的例子
下面是一个基类“Role”和一个派生类“Employee”的示例代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Role {
protected:
string name;
int age;
char gender;
public:
Role() {}
Role(string name, int age, char gender) : name(name), age(age), gender(gender) {}
void setName(string name) { this->name = name; }
void setAge(int age) { this->age = age; }
void setGender(char gender) { this->gender = gender; }
string getName() { return name; }
int getAge() { return age; }
char getGender() { return gender; }
virtual void display() {
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
cout << "Gender: " << gender << endl;
}
};
class Employee : public Role {
private:
int ID;
double salary;
public:
Employee() {}
Employee(string name, int age, char gender, int ID, double salary) : Role(name, age, gender), ID(ID), salary(salary) {}
void setID(int ID) { this->ID = ID; }
void setSalary(double salary) { this->salary = salary; }
int getID() { return ID; }
double getSalary() { return salary; }
void display() {
Role::display();
cout << "ID: " << ID << endl;
cout << "Salary: " << salary << endl;
}
};
int main() {
Employee e("Tom", 30, 'M', 1001, 5000.0);
Role* p = &e;
p->display();
return 0;
}
```
在这个示例中,Role类有三个数据成员:姓名、年龄和性别,以及getXXX()和setXXX()函数用于读写这些成员。它还有一个虚函数display(),该函数显示姓名、年龄和性别等成员的值。Employee类从Role类继承,并添加了两个数据成员:ID和salary。它还重新定义了display()函数,以便在显示姓名、年龄和性别等数据成员的值之后,还能显示ID和salary。在主函数中,我们创建了一个Employee对象e,并将其地址赋给一个基类指针p。然后,我们使用该指针调用虚函数display(),这将导致调用Employee类的display()函数。由于这是一个虚函数,因此将根据实际对象类型来确定要调用的函数。输出将是:
```
Name: Tom
Age: 30
Gender: M
ID: 1001
Salary: 5000
```
阅读全文