#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;
}
#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;
}
...
printf("0x00%x",a1.run);
希望这两篇文章能解答你的问题:
http://www.vckbase.com/document/viewdoc/?id=299
我也怀疑是我得函数地址用法错误,但是改成你这样也是一样的
父类对象a的地址0x0012FF70
父类对象a的成员a的地址0x0012FF74
父类对象a的成员b的地址0x0012FF78
父类对象a的成员c的地址0x0012FF7C
父类对象a的成员函数run的地址
0x00401046
子类对象a1的地址0x0012FF5C
子类对象a1的成员a的地址派生0x0012FF60
子类对象a1的成员b的地址0x0012FF64
子类对象a1的成员c的地址0x0012FF68
子类对象a1的成员d的地址0x0012FF6C
子类对象a1的成员函数run的地址
0x00401046 //地址还是和上面一样
子类对象a1的成员函数run的地址
0x0040105a
Press any key to continue
并非倒分