#include <iostream>
using namespace std;
class Student
{
public:
Student() {}
~Student() {}
void show()
{
cout << "Name: " << name << endl;
cout << "Surname: " << surname << endl;
cout << "Group: " << group << endl;
}
void set_name(string Name) { name = Name; }
void set_surname(string Surname) { surname = Surname; }
void set_group(string Group) { group = Group; }
protected:
string name, surname;
string group;
};
class Teacher
{
public:
Teacher() : salary(0) {}
~Teacher() {}
void show()
{
cout << "Name: " << name << endl;
cout << "Surname: " << surname << endl;
cout << "Degree: " << degree << endl;
cout << "Salary: " << salary << endl;
}
void set_name(string Name) { name = Name; }
void set_surname(string Surname) { surname = Surname; }
void set_degree(string Degree) { degree = Degree; }
void set_salary(double Salary) { salary = Salary; }
protected:
string name, surname;
string degree;
double salary;
};
class Undergraduate : public Student
{
public:
Undergraduate() {}
~Undergraduate() {}
};
class Postgraduate: virtual public Undergraduate
{
public:
Postgraduate() {}
~Postgraduate() {}
};
class TeachingAssistant: public Teacher, public Postgraduate
{
public:
TeachingAssistant(){}
~TeachingAssistant(){}
};
int main()
{
TeachingAssistant ta;
ta.show();
}
在这样的一段代码中,需要消除方法显示的歧义,set_name_set_surname
似乎我试图vritual在几乎所有地方替换继承,但它仍然不起作用。据我所知,virtual当某些东西被继承两次但它是同一个基类的成员时,它有助于消除歧义。
如果virtual方法来自不同的类,但名称不同,会有帮助吗?如果没有,最好的方法是什么?
但总的来说,这通常表明一个糟糕的项目......
如果你只是想打电话
然后为类创建这样一个函数
TeachingAssistant,并在其中调用您需要的祖先函数。见识过像 Sutter 这样的各种大师的意见,看来还是不要对多重继承得意忘形了。