博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何查看C++ class的对象模型
阅读量:5031 次
发布时间:2019-06-12

本文共 1615 字,大约阅读时间需要 5 分钟。

1. VS编译器打印对象模型

  VS系列的编译器大多都提供了下面这么一个编译选项,以在编译完成源文件之后可以打印出这个源文件中C++ class的对象模型:

cl [filename].cpp /d1reportSingleClassLayout[className]

  比如我的source.cc在这个目录之下:

  而我的源文件有这么几个class :

class base_up{public:    base_up()    {        base_up_val = 1;        cout << "base_up base_up function" << endl;    }    virtual ~base_up()    {        cout << "base_up ~base_up function" << endl;    }    virtual void show()    {        cout << "base_up show function" << endl;    }protected:    int base_up_val;};class base_left:virtual public base_up{public:    base_left()    {        base_left_val = 2;        cout << "base_left base_left function" << endl;    }    virtual void show()    {        cout << "base_left show function" << endl;    }protected:    int base_left_val;};class base_right: virtual public base_up{public:    base_right()    {        base_right_val = 3;        cout << "base_right base_right function" << endl;    }protected:    int base_right_val;};class derived: public base_left, public base_right{public:    derived()    {        derived_val = 4;        cout << "derived_val derived_val function" << endl;    }    ~derived()    {        cout << "derived_val ~derived_val function" << endl;    }protected:    int derived_val;};

  当要打印derived 这个class 的对象模型的时候可以这么编译source.cc这个源文件:

  当要打印base_up的时候只需要把[className]字段换成base_up就可以了。

2. G++编译器打印对象模型

  在G++编译器中也提供一个打印对象模型的选项,就是在编译的时候加上-fdump-class-hierarchy选项。以上面的继承模型举例(测试环境为gcc version 4.4.5 (Debian 4.4.5-8) ):

  执行这条编译指令后会在同级目录下生成一个test.cc.002t.class文件,其中内容就是整个test.cc里面所有class 的对象模型了:

   

转载于:https://www.cnblogs.com/Jer-/archive/2013/06/07/3124970.html

你可能感兴趣的文章
BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
查看>>
mybatis09--自连接一对多查询
查看>>
myeclipse10添加jQuery自动提示的方法
查看>>
【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。...
查看>>
视频监控 封装[PlayCtrl.dll]的API
查看>>
软件工程APP进度更新
查看>>
Python 使用正则替换 re.sub
查看>>
CTF中那些脑洞大开的编码和加密
查看>>
简化工作流程 10款必备的HTML5开发工具
查看>>
c++ 调用外部程序exe-ShellExecuteEx
查看>>
Java进击C#——语法之知识点的改进
查看>>
IdentityServer流程图与相关术语
查看>>
BirdNet: a 3D Object Detection Framework from LiDAR information
查看>>
icon fonts入门
查看>>
【Django】如何按天 小时等查询统计?
查看>>
HDU2191(多重背包)
查看>>
测试用例(一)
查看>>
【转】 mysql反引号的使用(防冲突)
查看>>
邮件中的样式问题
查看>>
AJAX 状态值与状态码详解
查看>>