您的位置:首页 > 编程语言 > C语言/C++

C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数

2011-08-12 14:56 1246 查看
本文转自 /article/1514937.html

源代码如下:

view
plain

#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;

}


运行结果:




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐