请使用面向对象编程思想用cpp简单编写代码实现如下功能验证继承的多根性和抽象类等技能点。 Person人类有姓名、性别和年龄属性有吃饭和行走的方法;Student学生类是人类中的一种学生类特有分数属性和学习、考试方法;Teacher老师类也是人类中的一种老师类特有的成员有工资属性和讲课方法;Assistant助教既是学生类中的一种也是老师类中的一种。请考虑人类设计成虚基类的原因是什么能不能可以由外
可以,可以通过构造函数或者set方法来实现。以下是一个简单的实现:
#include <iostream>
#include <string>
using namespace std;
class Person {
protected:
string name;
string gender;
int age;
public:
Person(string name, string gender, int age) {
this->name = name;
this->gender = gender;
this->age = age;
}
virtual void eat() {
cout << name << " is eating." << endl;
}
virtual void walk() {
cout << name << " is walking." << endl;
}
};
class Student : virtual public Person {
protected:
int score;
public:
Student(string name, string gender, int age, int score) : Person(name, gender, age) {
this->score = score;
}
void study() {
cout << name << " is studying." << endl;
}
void exam() {
cout << name << " is taking an exam." << endl;
}
};
class Teacher : virtual public Person {
protected:
double salary;
public:
Teacher(string name, string gender, int age, double salary) : Person(name, gender, age) {
this->salary = salary;
}
void teach() {
cout << name << " is teaching." << endl;
}
};
class Assistant : public Student, public Teacher {
public:
Assistant(string name, string gender, int age, int score, double salary) : Person(name, gender, age), Student(name, gender, age, score), Teacher(name, gender, age, salary) {}
};
int main() {
Assistant a("Tom", "Male", 23, 90, 5000);
a.eat();
a.walk();
a.study();
a.exam();
a.teach();
return 0;
}
在这个例子中,Person被设计成虚基类,是因为Student和Teacher都继承了Person类,而Assistant又同时继承了Student和Teacher,如果不使用虚继承,Assistant中就会包含两个Person对象,这样就会出现二义性问题。使用虚继承可以解决这个问题。
在main函数中我们创建了一个Assistant对象a,通过构造函数传入了成员信息,然后调用了各自的方法来验证功能实现。
原文地址: https://www.cveoy.top/t/topic/b4FJ 著作权归作者所有。请勿转载和采集!