C++基类与派生类

基类:
在这里插入图片描述
派生类:
在这里插入图片描述

1.派生类到基类的自动类型转换 (仅限于指针或者引用类型)
  • 可以把派生类的对象当成基类的对象使用
  • 可以将基类的指针或者引用绑定到派生类对象的基类部分(派生类到基类的类型转换),因为派生类的对象都包含基类的部分;在这里插入图片描述

关于静态类型和动态类型的说明

  • 静态类型:编译时已知,它是变量声明时的类型或者表达式生成的类型
  • 动态类型:运行时确定,变量在内存中的类型
  • 如果该对象是表达式或者指针,静态类型和动态类型可能不一致,如果不是这两种类型,那么它的动态类型和静态类型是一致的。特别明确的一点:基类的静态类型和动态类型可能不一致

特别注意的地方

  • 基类不能转化成派生类,因为如果能转化成功,该派生类可能会访问基类中不存在的成员在这里插入图片描述
  • 即使一个基类指针或引用绑定到了派生类的对象上,也不能执行从基类到派生类的转化在这里插入图片描述
  • 派生类到基类的类型转换 (仅限于指针或者引用类型),派生类类型和基类类型之间不存在这样的自动转换,当用派生类的对象初始化或者为一个基类对象赋值时,只有该对象的积累部分会被拷贝、或者赋值到基类对象中,其他的将被忽略掉(切掉)
2.派生类的构造函数
  • 派生类的构造函数:每个类控制自己的成员初始化的过程,在这里派生类中的构造函数调用了基类的构造函数
    在这里插入图片描述
3.静态成员的继承
  • 静态成员的继承:如果基类中定义了静态成员,则在整个继承体系中只存在该成员的唯一定义
    在这里插入图片描述
4.派生类的声明

派生类声明时和普通类一样,只包含类名而不包含派生列表
在这里插入图片描述

5.一个类既可以是派生类也可以是基类

Base是D1的直接基类,是D2的间接基类。
D1是Base的派生类,是D2的基类。
在这里插入图片描述

6.防止类被继承

如果一个类不想被其他类继承,在类名后加上final关键字