虚函数问题,问为什么我这个程序子类的函数和父类的虚函数地址是一样的,那编译器如何区分??
#include <iostream.h>
#include <stdio.h>
class ClassA
{
protected:
int a;
public:
int b;
int c;
ClassA(){};
virtual void run()
{
cout<<&a<<endl;
}
};
class ClassB:public ClassA
{
public:
int d;
void run()
{cout<<"派生"<<&a<<endl;}
void go()
{}
};
int main(int argc, char *argv[])
{
ClassA a;
cout<<"父类对象a的地址"<<&a<<endl;
cout<<"父类对象a的成员a的地址";
a.run ();
cout<<"父类对象a的成员b的地址";
cout<<&a.b<<endl;
cout<<"父类对象a的成员c的地址";
cout<<&a.c<<endl;
cout<<"父类对象a的成员函数run的地址"<<endl;
printf("0x00%x",ClassA::run);
cout<<endl;
ClassB a1;
cout<<"子类对象a1的地址"<<&a1<<endl;
cout<<"子类对象a1的成员a的地址";
a1.run ();
cout<<"子类对象a1的成员b的地址";
cout<<&a1.b<<endl;
cout<<"子类对象a1的成员c的地址";
cout<<&a1.c<<endl;
cout<<"子类对象a1的成员d的地址";
cout<<&a1.d <<endl;
cout<<"子类对象a1的成员函数run的地址"<<endl;
printf("0x00%x",ClassB::run);
cout<<endl;
cout<<"子类对象a1的成员函数run的地址"<<endl;
printf("0x00%x",ClassB::go);
cout<<endl;
//void (ClassA:: *p)()=ClassA::run;
//(a.*p)();*/
return 0;
}