zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    冲刺(六)
    冲刺(五)
    冲刺(四)
    团队产品开发
    冲刺(三)
    冲刺(二)
    冲刺(一)
    电梯演讲,模型展示
    校园健康行的NABCD分析
    团队博客
  • 原文地址:https://www.cnblogs.com/churi/p/3681749.html
Copyright © 2011-2022 走看看