源代码如下:
#include <iostream>
using namespace std;
class CSimple
{
public:
//静态成员变量
static const int sx = 0;
//静态函数
static void SF1()
{
}
public:
//成员变量
int x;
public:
//成员函数
void F1()
{
cout<<"I'm from CSimple::F1()"<<endl;
}
void F2()
{
cout<<"I'm from CSimple::F1()"<<endl;
}
public:
//构造函数,C++语法不允许获取构造函数和析构函数地址,要分析其地址,只能查看生产的汇编代码了。
CSimple()
{
}
//析构函数
~CSimple()
{
}
};
typedef void (CSimple::*Func)();
union
{
Func f;
void *addr;
}ut;
int main(int argc, char** argv)
{
cout<<"main()函数的地址是 :"<<std::hex<<std::showbase<<main<<endl;
ut.f = &CSimple::F1;
cout<<"成员函数F1()的地址是 :"<<std::hex<<std::showbase<<ut.addr<<endl;
ut.f = &CSimple::F2;
cout<<"成员函数F2()的地址是 :"<<std::hex<<std::showbase<<ut.addr<<endl;
cout<<"静态成员函数SF1()的地址是:"<<std::hex<<std::showbase<<CSimple::SF1<<endl;
cout<<"静态成员变量sx的地址是 :"<<std::hex<<std::showbase<<&CSimple::sx<<endl;
cout<<"CSimple类型实例的大小 :"<<sizeof(CSimple)<<endl;
CSimple* pObj = new CSimple();
cout<<"对象指针变量的地址是 :"<<std::hex<<std::showbase<<&pObj<<endl;
cout<<"新建对象的地址是 :"<<std::hex<<std::showbase<<pObj<<endl;
cout<<"成员变量的地址是 :"<<std::hex<<std::showbase<<&pObj->x<<endl;
//CSimple *p = new CSimple();
//(p->*f)();
delete pObj;
cin>>argc;
return 0;
}
运行结果: