C++——多态

2020-11-07  本文已影响0人  StevenHD

一、多态的意义

二、多态实现的前提——赋值兼容

赋值兼容只会发生在公有派生父子关系

  1. 子类对象赋给父类的对象
  2. 子类对象赋给父类的引用
  3. 子类对象的地址赋给父类的指针

三、函数重载是静多态

相同的函数名,不同的参数列表

编译的时候其实就把函数名改变了——

函数重载的本质

四、动多态

4.1 如何证明动多态不是在编译时确定的

动多态在运行时确定的证明

4.2 override

  • overload——同一个作用域中,函数名相同,参数列表不同
  • shadow——发生在父子类中的同名成员(数据or函数)
  • override——发生在父子类中,父类中函数有virtual声明的函数,在子类中,同参,同名,同返回的返回,二者之间构成了override。
  1. 多态在涉及到赋值兼容的时候,用得最多的还是指针
  2. 虚函数的访问权限,并不一定一定要跟父类一样是public,也可以是private或protected,具体看子类的需求。

五、纯虚函数

作用是提供族类的公共接口

六、含有虚函数的析构

6.1 栈上的构造与析构

栈上的构造和析构
栈上的构造和析构的结果

6.2 堆上的构造与析构

堆上的相应操作
堆上的相应操作的结果

可以看到,没有~Dog(),说明析构不完全。那么如何析构完全呢?

  • 答案是引入虚析构

6.3 虚析构

虚析构的结果

6.4 静态函数不能是虚函数

因为要实现多态,一定要有对象。但是静态函数属于类,不属于对象

6.5 内联函数不能是虚函数

上一篇 下一篇

猜你喜欢

热点阅读