刚刚毕业找工作时,整理了一些C/C++基础问题和答案,有些是日常遇到的问题,有些是网上其他人的分享,其中涉及到程序输出的问题我都亲自编程验证过,在问题后面也用黑色加粗字体标注了“验证by云峰小罗”。现在已经8月下旬了,暑假一过开学后校招就开始了,所以稍作整理分享出来,希望对参加校招的小师弟师妹有些许帮助,毕竟我当年毕业时就是对这些问题比较留心,然后顺利校招进入某鹅厂的。
1、C++虚函数实现机制一个拥有virtual成员函数的类拥有一个虚函数表,而该类的每个对象都拥有一个虚指针,指向该类的虚函数表。运行时,通过对象自己的虚指针去索引正确的虚函数来运行。若基类中的virtual函数返回类型为基类型的引用或者指针,则派生类中重写该函数,需要将返回类型改为派生类类型的引用或者指针。
在C++的标准规格说明书中说到,编译器必需要保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证正确取到虚函数的偏移量)。这意味着我们通过对象实例的地址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应的函数。
usingnamespacestd;
classBase{
public:
virtualvoidf(){cout"Base::f"endl;}
virtualvoidg(){cout"Base::g"endl;}
virtualvoidh(){cout"Base::h"endl;}
};
intmain()
{
typedefvoid(*Fun)(void);
Baseb;
FunpFun=NULL;
cout"虚函数表