1
C++ 面向对象面试题阅读指南(必看)
2
面向对象的三大特征是哪些?
3
C++中类成员的访问权限
4
多态的实现有哪几种?
5
动态绑定是如何实现的?
6
动态多态有什么作用?有哪些必要条件?
7
纯虚函数有什么作用?如何实现?
8
虚函数表是针对类的还是针对对象的?同一个类的两个对象的虚函数表是怎么维护的?
9
为什么基类的构造函数不能定义为虚函数?
10
为什么基类的析构函数需要定义为虚函数?
11
构造函数和析构函数能抛出异常吗?
12
如何让一个类不能实例化?
13
多继承存在什么问题?如何消除多继承中的二义性?
14
如果类A是一个空类,那么sizeof(A)的值为多少?
15
覆盖和重载之间有什么区别?
16
拷贝构造函数和赋值运算符重载之间有什么区别?
17
对虚函数和多态的理解
18
请你来说一下C++中struct和class的区别
19
说说C++的四种强制类型转换运算符
20
简述类成员函数的重写、重载和隐藏的区别
21
类型转换分为哪几种?各自有什么样的特点?
22
RTTI是什么?其原理是什么?
23
说一说c++中四种cast转换
24
C++的空类有哪些成员函数
25
模板函数和模板类的特例化
26
为什么析构函数一般写成虚函数
共 26 篇文章
评论(2)
1、构造一个对象的时候,必须知道对象的实际类型,而虚函数是在运行期间确定实际类型的。如果构造函数为虚函数,则在构造一个对象时,由于对象还未构造成功,编译器还无法知道对象的实际类型,是该类本身还是派生类。无法确定。
2、虚函数的执行依赖于虚函数表,而虚函数表是在构造函数中初始化的,即初始化vptr,让它指向虚函数表。如果构造函数为虚函数,则在构造对象期间,虚函数表还没有被初始化,将无法进行。
因为创建一个对象时需要确定对象的类型,而虚函数是在运行时确定其类型的。