继承和派生:主要有基类(又称父类)和派生类(又称子类)
主要结构://类标识 类名 : 继承方式 基类类名
派生类继承了父类的什么?
除了基类的构造函数和析构函数以外的所有成员(成员方法,成员变量,作用域)
Public:任意位置都可以访问
Protected:本类类中,子类中可以访问
Private:本类类中访问
**基类中不同的访问限定符下的成员以不同的继承方式在派生类中的访问限定:
基类
派生类 public protected private
Public public protected 不可访问的
Protected protected protected 不可访问的
Private private private 不可访问的
基类中的私有成员继承了但是属性是不可见的
Derive(int b):mb(b),Base(b)//指明构造方式
内存布局:
派生类对象的构造和析构方式:
1. 派生类 1.基类部分 2.派生类部分
构造:先基类部分,后派生类部分
类和类的关系:
组合:a part of has_a
继承:a kind of is_a
代理
同名函数的关系:
1. 函数重载
2. 隐藏
(1)继承关系:基类和派生类同名的方法,不同的作用域
(2)派生类同名同参数的虚函数会覆盖基类
3. 覆盖
(1)继承关系:基类和派生类同名同参的方法
(2)派生类的同名函数隐藏了基类的所有同名函数
基类和派生类的相互指向/引用
Base *pbase=&d;(对) 允许基类指针指向派生类对象
Base &rbase=d; 允许基类引用派生类对象
多态:一种接口,不同形式
(1)静多态(在编译期间确定函数入口地址)(静态绑定,早绑定)
(2)动多态(在运行期间)(动态绑定,晚绑定)(virtual给动多态提供支持)
Class Base
{
Vfptr;//虚函数入口地址(放在虚表vftable(位于只读数据段))
Mb;
}
基类中的函数是虚函数,派生类中同名同参的函数也是虚函数
什么情况下会发生动多态的调用?(eax(运行时))
1. 指针或引用调用虚函数
2. 对象要完整