当前位置:首页 > 【C 】多态(上) >
【C 】多态(上)
个人主页~。
多态。
- 一、多态概念。
- 二、定义和实现多态化。
- 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.根据其在派生类中的声明顺序,将派生类自身新增的虚拟函数添加到派生类虚表的最后。注意虚表存是虚函数指针,不是虚函数
与普通函数相同的虚拟函数,都有代码段。