继承的方式

class默认继承权限:private
struct默认继承权限:public
赋值兼容规则----public继承方式
is a:可以将派生类对象看成一个基类的对象,在所有使用基类对象的位置,可以使用派生类对象来进行替换。
1.派生类对象可以给基类对象赋值,反之不行。
2.基类的指针或者引用可以指向派生类的对象,反之不行。
继承体系中的作用域
1.基类与派生类属于不同的作用域
2.同名隐藏
__基类与派生类拥有相同的成员(成员变量or成员函数),派生类调用时优先调用派生类中的成员。
友元:友元关系不可继承。
静态成员:可以继承,并且在整个继承体系中只有一份。
对象模型
单继承:一个子类只有一个直接父类时称这个继承关系为单继承。

菱形继承:菱形继承是多继承的一种特殊情况。

菱形继承解决二义性:
1.加作用域
2.虚继承
class B{
public:
int -b;
};
class D:virtual public B{
public:
int _d;
};
sizeof(D)==12

普通单继承&虚拟继承不同:
1.对象模型不同
2.对基类部分成员的访问方式
3.虚拟继承:用户没有显示定义派生类的构造函数,编译器会生成一个默认的构造函数。
__将偏移量表格的地址放到对象前四个字节中

网友评论