面经整理自网络,答案为个人补充内容。
C++基础
1. 多态,虚函数
- 怎么理解多态?多态的定义?
答:多态就是让程序可以在编译时/运行时决定被调用的方法是哪一个。多态分编译时多态和运行时多态。运行时多态通过继承和虚函数来体现;在程序编译时多态体现在函数和运算符的重载上。 - 举个多态的例子?
比如有个英雄类,它有个攻击方法。现在再实现它的两个子类法师类和战士类,它们各自有不同的攻击方法。然后在程序执行时就可以用英雄类的指针指向法师类或者战士类对象,然后用这个父类指针调用战斗时就会触发动态绑定,调用到指向对象自己的方法。 - C++如何实现多态?
答:将基类类型的指针或者引用指向派生类型的对象。通过虚函数,子类重写父类函数,执行时根据对象类型执行不同的函数达到多态。 - 多态有什么用?
答:①代码重用:隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;②接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用
C++虚函数的实现机制? - 虚函数具体是怎么实现动态绑定的?
答:类有一个虚函数表,定义的每个实例对象有一个虚函数表指针指向类的虚函数表。子类重写父类的虚函数会替换虚函数表项的对应函数指针。 - 每个实例对象都有一个虚函数表指针吗?
答:是的。 - 虚函数放哪?
答:放在类的最前面的位置,有一个指向虚函数表的指针 - 多继承的虚函数表怎么放?
答:一个在上另一个在下面,按照继承顺序 - 说说虚继承?
答: 如果b,c是a的子类,d继承b,c,那么d中a会被构造两次,造成数据冗余。使用虚继承则a只会被构造一次
虚函数,子类父类virtual 写不写有什么区别
4.虚函数的原理介绍一下,哪些函数不能是虚函数构造函数中可以调用虚函数吗?为什么?
析构函数需要声明为虚函数吗?为什么?
5.虚函数指针在多继承下的情况
比如类C继承了类A和类B。A,B中都有虚函数,那么C的虚表指针有多少个,
6.类C又定义了自己的虚函数,在虚表中的存储位置?
//问题5和6推荐看一下这篇博客 说的很详细 https://blog.csdn.net/li1914309758/article/details/79916414
虚函数的原理?
A是基类,B是子类,B在构造函数中调用A的虚函数会怎样?
1.C++虚函数(1) 函数调用(2) 虚函数表什么时候创建,工作原理(
①C++的多态如何实现(虚函数、虚函数表那些),是如何从调用虚函数到虚函数表里的指针指向指定虚函数,
1.多态的实现
2.如果父类和子类定义了一个函数名相同的函数,但不是虚函数,问父类指针指向的子类对象,调用这个函数是调用父类还是子类函数?同样,如果子类指针指向父类的对象,调用这个函数是调用父类还是子类函数?讲述一下它的原理
虚函数调用是怎么实现的。动态绑定发生时是怎么调用到子类的函数。多继承的子类有几个虚函数表。