#include<iostream>
using namespace std;
class A
{
public:
virtual void prin(){cout<<1<<endl;};
};
class B: public A
{
public:
virtual void prin(){cout<<2<<endl;};
};
void f(A&d){d.prin();};
void main()
{
//取得类的虚函数表指针
typedef void (A::*_pfClass_fun)();
_pfClass_fun pf;
pf=&A::prin;
pf=&A::prin;
}
从代码的运行上能看pf有地址,也就说类分配了地址。那么问题是 ,当我进行实例化对象之后,类函数的指针和虚函数表所对应值不一样!这是为什么呢?
问题二 对应上面的代码 如果我将继承方式均修改为virtual 继承方式,那么A虚派生B 那么 prin()会被B 覆盖,C同理会覆盖A D会覆盖 B 和C以及A类的虚函数,问题是我在D中同时看见了A B C 在我通过虚继承方式的时候其值相等,当不用虚继承时候 不相等,这就是所谓的动态运行时确定么? 也就是当传入的对象不同的时候,我调用的不同,而没有调用的时候 是无法确定其准确的调用函数地址?求解释 谢谢