c++ virtual function 虚函数面试题

下面的代码输出什么?

 1 #include<iostream>
 2 using namespace std;
 3 class A
 4 {
 5 public:
 6     virtual void foo()
 7     {
 8         cout<<"hello A"<<endl;
 9     }
10 };
11 class B
12 {
13 public:
14     void foo()
15     {
16         cout<<"hello B"<<endl;
17     }
18 };
19 void main()
20 {
21     A *pa = NULL;
22     B *pb = NULL;
23     pa->foo();
24     pb->foo();
25 
26 }
分析:
1.对于class A 当pa->foo()时,编译器将调用转化为(*pa->vptr[1])(ptr);但是现在的pa=NULL,而vptr指针是在对象构造的时候初始化的,所以vptr是没有初始化的,所以调用pa->foo()的结果是不确定的。
2.而对于class B 当调用pb->foo()时,编译器将调用转化为B_foo(); 在class B 编译的时候已经将foo()函数编译成了独一无二的函数调用地址即B_foo(),所以pb->foo()输出hello B.
原文地址:https://www.cnblogs.com/churi/p/3681749.html