当前位置:首页 > 【C 】多态(上) >

【C 】多态(上)

来源 德薄能鲜网
2025-06-24 12:19:04

在这里插入图片描述
个人主页~。


多态。

  • 一、多态概念。
  • 二、定义和实现多态化。
    • 1、多态构成条件。
    • 2、虚函数。
    • 3、重写虚拟函数。
      • 虚拟函数重写的两个特殊情况。
        • ①协变。
        • ② 重写分析函数。
    • 4、C++11override和final。
      • (1)final。
      • (2)override。
    • 5、对比重载、重写、隐藏。
  • 三、抽象类。
    • 1、概念。
    • 2、接口继承和实现继承。
  • 四、多态原理。
    • 1、虚函数表。

一、多态概念。

用白话说就是。完成某一行为�不同的对象完成会产生不同的状态。,C++多态是不同继承关系的类对象,调用同一函数,产生不同的行为。

二、定义和实现多态。

1、多态构成条件。

调用虚函数必须通过基类指针或引用。

被调用的函数必须是虚拟函数,而且衍生物必须重写基类的虚拟函数。

2、虚函数。

virtual修改的类成员函数称为虚拟函数。

class。A。{ 。(。)。{ 。A a。;B b。;return。

在这里插入图片描述
0

;

}。

也有虚表指针,b对象由两部分组成,其中一些是从父类继承下来的成员,虚表指针也就是说,存在部分的另一部分是他们自己的成员。

基类a对象与衍生类b对象虚表不同,在这里,我们发现Func1已经完成了重写,因此,B的虚表中存储了重写B::Func1�因此,虚拟函数的重写也被称为覆盖,覆盖是指虚拟表中虚拟函数的覆盖,重写是语法的名称,覆盖是原理层的名称。
另外,Func2继承后,虚函数,因此,放入虚表,Func3也继承了,但不是虚函数,所以不要把虚表放进去。
虚拟函数表的本质是存虚函数指针的指针数组,一般来说,这个数组最后放了一个nullptr。
总结衍生虚表生成:

a.首先将基类中的虚表内容复制到衍生虚表中。b.如果派生类重写了基类中的虚拟函数,在虚表中使用自己的虚拟函数来覆盖虚表中基类的虚拟函数。c.根据其在派生类中的声明顺序,将派生类自身新增的虚拟函数添加到派生类虚表的最后。注意虚表存是虚函数指针,不是虚函数󿀌


与普通函数相同的虚拟函数,都有代码段。

在这里插入图片描述

,只是他的指针又存在于虚拟表中,另外,对象中存储的不是虚表,虚表指针,虚表存在于VS下的代码段。今日分享到此为止~。