C++虚函数、纯虚函数、虚函数表
- 虚函数
virtual ReturnType Function(){}
- 纯虚函数
virtual ReturnType Function()=0;
虚函数与纯虚函数的区别
- 声明虚函数,可以定义,也可以不定义,含有虚函数的类,可以被实现。
- 声明纯虚函数,不可以有定义,含有纯虚函数的类(等价于抽象类),不可以被实现。
虚函数表
虚函数表是C++实现动态绑定技术(多态)的背后依赖。每个包含虚函数的类都包含一个虚表,同一个类的多个对象共享同一个虚表,也就是说每个对象前8个字节用来存储一个指针,同一类的多个对象的该指针相同,都指向该类的虚表。而虚表的构造在编译阶段就已经确定下来了。
1 | class A |
所以当调用a->func1()
的时候,尽管a
是类A
的指针,但是仍然访问到对象对应的虚表,而*a
对应的对象是B
,B
的虚表中func1
指向的是B::func1
,所以最后访问到的是B::func1
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.