《程序员面试宝典》上看到一条关于虚函数的选择题,提到虚表,c++primer上面没有怎么详细的讲,然后去google了一下,顿时发现自己原来对虚函数这么的不了解啊。看到这样一道题,我自己做错了,能做对的人肯定是彻底掌握虚函数了:
- #include <iostream>
- using namespace std;
- class IHello{
- public:
- virtual void Hello()= 0;
- };
- class IWorld{
- public:
- virtual void World()= 0;
- };
- class HelloWorld:public IHello, public IWorld{
- public:
- virtual void Hello(){
- cout<<"Hello"<<endl;
- }
- virtual void World(){
- cout<<"World"<<endl;
- }
- };
- int main(){
- IHello* hello = new HelloWorld;
- IWorld* world = (IWorld*)(void*)hello;
- world->World();
- }
问题:请问输出结果是什么?
答: Hello
请问,你做对了吗?看了讲这道题的作者,还特别写了一篇文章,很不错,值得好好研究 C++ 虚函数表解析。这篇文章看透并且懂得这道题,再遇到虚函数的问题就都不是问题。