定义一个基类person类类内有数据成员姓名,年龄,性别,有对各数据成员进行读写的函数getXXX()和setXXX(),有一个虚函数display(),该函数显示姓名,年龄,性别等数据成员的值,同时类内至少定义两个构造函数。 从Role类派生出一个“Employee”类,该类具有Role类的所有成员(构造函数除外),并扩展数据成员ID (职工编号)和salary(薪资)。同样要有至少两个构造方法,并重新定义display()函数。 主函数内定义基类指针和派生类对象,并使基类指针指向派生类对象,通过该基类
时间: 2024-03-20 14:44:24 浏览: 82
定义一个人员类Person,数据成员有姓名,能够设置姓名的值及显示姓名
5星 · 资源好评率100%
代码如下:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Person {
protected:
string name;
int age;
char gender;
public:
// 默认构造函数
Person() {}
// 带参数的构造函数
Person(string name, int age, char gender): name(name), age(age), gender(gender) {}
// 姓名的读写函数
void setName(string name) {
this->name = name;
}
string getName() {
return name;
}
// 年龄的读写函数
void setAge(int age) {
this->age = age;
}
int getAge() {
return age;
}
// 性别的读写函数
void setGender(char gender) {
this->gender = gender;
}
char getGender() {
return gender;
}
// 虚函数display()
virtual void display() {
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
cout << "Gender: " << gender << endl;
}
};
class Role : public Person {
protected:
string title;
string department;
public:
// 默认构造函数
Role() {}
// 带参数的构造函数
Role(string name, int age, char gender, string title, string department) :
Person(name, age, gender), title(title), department(department) {}
// 职位的读写函数
void setTitle(string title) {
this->title = title;
}
string getTitle() {
return title;
}
// 部门的读写函数
void setDepartment(string department) {
this->department = department;
}
string getDepartment() {
return department;
}
// 虚函数display()
virtual void display() {
Person::display();
cout << "Title: " << title << endl;
cout << "Department: " << department << endl;
}
};
class Employee : public Role {
private:
int ID;
float salary;
public:
// 默认构造函数
Employee() {}
// 带参数的构造函数
Employee(string name, int age, char gender, string title, string department, int ID, float salary) :
Role(name, age, gender, title, department), ID(ID), salary(salary) {}
// ID的读写函数
void setID(int ID) {
this->ID = ID;
}
int getID() {
return ID;
}
// 薪资的读写函数
void setSalary(float salary) {
this->salary = salary;
}
float getSalary() {
return salary;
}
// 重新定义虚函数display()
virtual void display() {
Role::display();
cout << "ID: " << ID << endl;
cout << "Salary: " << salary << endl;
}
};
int main() {
Employee emp("Tom", 25, 'M', "Manager", "Sales", 12345, 5000.0);
Person* p = &emp;
p->display();
return 0;
}
```
这个程序定义了一个 `Person` 基类,一个 `Role` 派生类以及一个 `Employee` 派生类。`Person` 类定义了姓名、年龄、性别三个数据成员,以及对应的读写函数 `getXXX()` 和 `setXXX()`,还有一个虚函数 `display()`。`Role` 类继承了 `Person` 类,并添加了职位和部门两个数据成员,同时也有一个虚函数 `display()`。`Employee` 类继承了 `Role` 类,并添加了职工编号和薪资两个数据成员,同时也有一个重新定义的虚函数 `display()`。
在主函数中,我们创建了一个 `Employee` 类对象 `emp`,并将其指针赋值给基类指针 `p`,然后调用了 `p->display()` 函数,这里会调用 `Employee` 类中重新定义的 `display()` 函数,输出了 `Employee` 类中所有的数据成员的值。
阅读全文