person作为虚基类派生学生类和教师类编写主函数代码
时间: 2024-02-01 10:15:29 浏览: 81
好的,以下是一个简单的示例代码:
```
#include <iostream>
#include <string>
// 声明 Person 类,作为虚基类
class Person {
public:
Person(std::string name, int age) : m_name(name), m_age(age) {}
virtual void introduce() = 0; // 纯虚函数,子类必须实现
protected:
std::string m_name;
int m_age;
};
// 学生类,从 Person 类派生
class Student : public virtual Person {
public:
Student(std::string name, int age, std::string major) : Person(name, age), m_major(major) {}
virtual void introduce() {
std::cout << "我是一名学生,我的名字是" << m_name << ",今年" << m_age << "岁,专业是" << m_major << std::endl;
}
private:
std::string m_major;
};
// 教师类,从 Person 类派生
class Teacher : public virtual Person {
public:
Teacher(std::string name, int age, std::string subject) : Person(name, age), m_subject(subject) {}
virtual void introduce() {
std::cout << "我是一名教师,我的名字是" << m_name << ",今年" << m_age << "岁,教授的科目是" << m_subject << std::endl;
}
private:
std::string m_subject;
};
// 主函数
int main() {
Person* p1 = new Student("张三", 20, "计算机科学与技术");
Person* p2 = new Teacher("李四", 30, "高等数学");
p1->introduce(); // 输出:我是一名学生,我的名字是张三,今年20岁,专业是计算机科学与技术
p2->introduce(); // 输出:我是一名教师,我的名字是李四,今年30岁,教授的科目是高等数学
delete p1;
delete p2;
return 0;
}
```
这个代码定义了一个 Person 类作为虚基类,并从它派生出了 Student 类和 Teacher 类。Person 类中定义了一个纯虚函数 introduce(),子类必须实现该函数。
在主函数中,我们生成了一个学生对象和一个教师对象,并使用父类指针来访问它们。由于 introduce() 是虚函数,因此会根据对象的实际类型来调用相应的函数。最后,我们释放了对象所占用的内存。
阅读全文