只看下面的两个类。当我在“ main”中调用函数时,编译和程序运行时会发生什么?

#include <iostream>
#include <string>
using namespace std;
class A{
public:
    virtual void fun2(){cout<<"A::fun2"<<endl;}
};
class B : public A{
public:
    void fun2(){cout<<"B::fun2"<<endl;}
};
int main() {
    A *a = new B();
    B *b = new B();
    //What's the differences among the followings?
    a->A::fun2();
    b->A::fun2();
    A::fun2();

    return 0;
}


我知道要打印什么程序,但是我想知道为什么。我知道对象中有一个虚函数表,但是当我调用


  a-> A :: fun2()


, 怎么运行的?由于在a或b的v表中,fun2()将打印B :: fun(),程序如何进入函数A :: fun2()?

最佳答案

a->A::fun2();


将打印A :: fun2



b->A::fun2();


将打印A :: fun2



A::fun2();


不会被编译

09-11 17:33