定义一个人员CPerson类,包含数据成员年龄和姓名,定义一个CPerson类的派生类教师CTeacher类,包含数据成员专业和职称。分别为两个类定义带参数的构造函数初始化,再分别定义display()函数输出信息。将display()函数定义为虚函数,并用CPerson类的指针分别指向CPerson类和CTeacher类的对象,实现多态。编写主函数测试。
时间: 2024-03-16 09:47:07 浏览: 90
好的,我来为你解答这个问题。
首先,我们需要定义一个基类 `CPerson`,其中包含 `age` 和 `name` 两个数据成员。同时,我们需要定义一个带参数的构造函数来初始化这两个数据成员。
```cpp
class CPerson {
public:
CPerson(int age, std::string name) : age(age), name(name) {}
virtual void display() {
std::cout << "Age: " << age << ", Name: " << name << std::endl;
}
protected:
int age;
std::string name;
};
```
接下来,我们定义一个 `CTeacher` 类,它是 `CPerson` 的派生类。除了继承 `CPerson` 的数据成员外,它还包含了 `major` 和 `title` 两个数据成员。同样,我们需要定义一个带参数的构造函数来初始化这两个数据成员。
```cpp
class CTeacher : public CPerson {
public:
CTeacher(int age, std::string name, std::string major, std::string title)
: CPerson(age, name), major(major), title(title) {}
void display() override {
std::cout << "Age: " << age << ", Name: " << name
<< ", Major: " << major << ", Title: " << title << std::endl;
}
private:
std::string major;
std::string title;
};
```
注意,我们将 `CPerson` 中的 `display()` 函数定义为了虚函数,并在 `CTeacher` 中进行了重写。
最后,我们在主函数中创建一个 `CPerson` 类的对象和一个 `CTeacher` 类的对象,并用 `CPerson` 类的指针分别指向它们,并分别调用 `display()` 函数,实现多态。
```cpp
int main() {
CPerson person(20, "Tom");
CTeacher teacher(30, "Jack", "Computer Science", "Professor");
CPerson* p1 = &person;
CPerson* p2 = &teacher;
p1->display();
p2->display();
return 0;
}
```
输出结果为:
```
Age: 20, Name: Tom
Age: 30, Name: Jack, Major: Computer Science, Title: Professor
```
这就完成了我们的需求,同时也实现了多态的效果。
阅读全文