C++继承分单继承和多继承。
一、单继承。
线性构成、结构单一。
//单继承。
class GrandMa
{
};
class Mother : public GrandMa
{
};
class Daughter :Mother
{
};
二、多继承。
//多继承。
class GrandPa
{
};
class GrandMa
{
};
class Mother : public GrandPa,public GrandMa
{
};
多继承之菱形继承:
class GrandPa
{
public:
GrandPa() : m_nAge(1)
{
}
int m_nAge;
};
class Father :public GrandPa
{
};
class Uncle :public GrandPa
{
};
class Son :public Father, public Uncle
{
};
调用:
int main()
{
Son aa;
aa.m_nAge;
cin.get();
return 0;
}
编译错误:
解决方法:
虚继承(Virtual Inheritance)。
class GrandPa
{
public:
GrandPa() : m_nAge(1)
{
}
int m_nAge;
};
class Father :virtual public GrandPa
{
};
class Uncle :virtual public GrandPa
{
};
class Son :public Father, public Uncle
{
};
int main()
{
Son son;
cout << son.m_nAge << endl;
cin.get();
return 0;
}
编译成功:
三、总结。
虚继承是一种继承机制。
类通过虚继承指出它希望共享虚基类的状态。
对给定的虚基类,无论该类在派生层次中作为虚基类出现多少次,
只继承一个共享的基类子对象,共享基类子对象称为虚基类。
虚基类用virtual声明继承关系。