继承有3种形式:私有继承、保护继承、公有继承,缺省的继承方式是私有继承。
继承的好处是什么?
1.基类给所有派生类提供公共的属性(成员变量)和方法(成员函数),通过继承达到代码复用的目的。
2.基类可以给所有派生类提供统一的纯虚函数接口,派生类通过函数重写,达到多态调用的目的。(OOP的很多设计模式离不开继承和多态,为了达到良好的软件设计,如高内聚,低耦合,遵循‘开-闭’原则等,继承和多态是必须涉及到的)。
说到oop:
OOP 语言有几个常考的理论问题是:
“面向对象 OOP 语言的四大特征?” 答:抽象,封装,继承,多态
“面向对象 OOP 语言的三大特征?” 答:封装,继承,多态
“常见的类与类之间的关系?” 答:代理,组合,继承
继承的访问限定代码如下:
// A是基类
class A
{
public:
int ma;
protected:
int mb;
private:
int mc;
};
// B是派生类,继承到派生类里面的成员访问限定要小于等于继承方式
class B : public A
{
public:
int md;
protected:
int me;
private:
int mf;
};
派生类B从基类A继承了成员ma,mb和mc,那么这三个成员在派生类B种的访问权限是什么,看如下表格:
从上面的总结可以看出:
1.基类的private私有成员,无论采用什么继承方式,在派生类里面都是可以继承下来,但是无法访问。
2.protected和private的区别。基类的private私有成员,在派生类和外部都不能直接访问;但是基类protected的成员,在派生类中是可以访问的,在外部不能访问。
派生类从基类继承的成员变量该如何初始化呢?必须通过调用基类的构造函数来初始化从基类继承来的成员!
派生类调用基构造函数的顺序如下
1.先调用基类构造函数,构造从基类继承来的成员;
2.再调用派生类自己的构造函数,构造派生类自己的成员;
3.先调用派生类自己的析构函数,释放派生类自己占用的外部资源 ;
4.调用基类的析构函数,释放基类部分成员占用的外部资源;