zhoujiamurong 2005年03月18日
虚函数问题,问为什么我这个程序子类的函数和父类的虚函数地址是一样的,那编译器如何区分??
#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;
}
...全文
144 点赞 收藏 14
写回复
14 条回复

还没有回复,快来抢沙发~

发动态
发帖子
VC/MFC
创建于2007-09-28

7872

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告