单继承:
一个子类只有一个直接父类时称这个继承关系为单继承。
多继承:
一个子类有两个或以上直接父类时称这个继承关系为多继承。
菱形继承:
菱形继承是多继承的一种特殊情况。两个子类继承同一个父类,而又有子类同时继承这两个子类。
菱形继承的问题:
从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。在Assistant的对象中Person成员会有两份。
class Person
{
public:
string _name; //姓名
};
class Student : public Person
{
protected:
int _num; //学号
};
class Teacher : public Person
{
protected:
int _id; //职工编号
};
class Assistant : public Student, public Teacher
{
protected:
string _majorCourse; //主修课程
};
void Test()
{
//这样会有一个二义性,无法明确知道访问的是哪一个
Assistant a;
a.<