首页 > 编程语言 > 详细

c++ virtual function 虚函数面试题

时间:2014-04-23 14:15:59      阅读:427      评论:0      收藏:0      [点我收藏+]

下面的代码输出什么?

bubuko.com,布布扣
 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.
bubuko.com,布布扣

 

c++ virtual function 虚函数面试题,布布扣,bubuko.com

c++ virtual function 虚函数面试题

原文:http://www.cnblogs.com/churi/p/3681749.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!