派生新类:吸收已有类的成员、调整已有类成员和添加新的成员
class 派生类名:继承方式 基类名1, 继承方式 基类名2, .......
{
派生类成员声明;
}
继承方式有:public、protected、private(默认)
公有继承:基类的公有和保护乘员的访问属性在派生类中不变,基类的私有成员不能直接访问
类型兼容规则
在需要基类对象的任何地方,都可以使用公有派生类的对象来代替
1、派生类的对象赋值给基类对象
2、派生类的对象可以初始化基类的引用
3、派生类的对象的地址可以赋给指向基类的指针
在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员
class B{ ... }
class D: public B { ... }
B b1, *pb1; D d1;
b1 = p1; B &bb = p1; pb1 = &d1;
派生类构造函数
1、调用基类构造函数,调用顺序按照被继承时声明的顺序
2、调用内嵌成员对象的构造函数,调用顺序按照在类中声明的顺序
3、派生类的构造函数体中的内容
class C:public B2, public B1,public B3{
public:
C(int a, int b ,int c, int d):B1(a), memberB2(d), memberB1(c), B2(b){ }
privae:
B1 memberB1; B2 memberB2; B3 member B3;
}
调用顺序: B2 B1 B3 B1 B2 B3
析构函数:相反
隐藏规则:内层变量隐藏了外层同名变量
D d;
d.nv = 1; d.fun();
d.B1::nv =1; d.B1::fun();
d.B2::nv =2; d.B2::fun();
虚基类:从不同的路径继承过来的同名数据成员在内存中只有一个拷贝,同一个函数名也只有一个隐射。
派生类和虚基类的成员一起维护同一个内存数据拷贝。