当前位置: 首页 > news >正文

长沙网站建设市场低价北京做网站价格

长沙网站建设市场低价,北京做网站价格,东营信息发布平台,企业做网站公司哪家好C 对象模型 C Object Model 文章目录 C 对象模型 C Object ModelC语言的数据及函数C的类C对象模型 C语言的数据及函数 C语言中,数据和函数是分开声明的。 数据 typedef struct point2d {float x;float y; } Point2d;函数 打印Point2d的数值 void Point2d_print…

C++ 对象模型 C++ Object Model

文章目录

  • C++ 对象模型 C++ Object Model
    • C语言的数据及函数
    • C++的类
    • C++对象模型

C语言的数据及函数

C语言中,数据和函数是分开声明的。

  • 数据
typedef struct point2d
{float x;float y;
} Point2d;
  • 函数

打印Point2d的数值

void Point2d_print(const Point2d * pd)
{printf("(%f, %f)", pd->x, pd->y);
}

C++的类

同样实现C语言的功能,C++中可以进行如下定义

class Point2d
{Point2d(float x, float y):m_x(x), m_y(y){}print(){printf("(%f, %f)", m_x, m_y);}private:float m_x;float m_y;
};

问题:Point2d从C到C++,内存布局上有啥变化呢?

答案是没有变化。
本例中,C++ 中的数据成员和C中一样,不一样的是C++中多了一个非静态成员函数print,但非静态成员函数与数据成员是分离的,并不占用类的大小。也就是说print函数的调用实际为print(Point2d* pd),就如同C语言的Point2d_print调用。

C++内存布局的额外负担有virtual引起,主要包好虚函数(virtual function)和虚基类(virtual base class)。

C++对象模型

C++中,
类数据成员有两种:静态(static) 和 非静态(nonstatic)
类成员函数有三种:静态函数(static)、非静态函数(nonstatic) 和 虚函数(virtual)

C++对象模型:

  1. 非静态(nonstatic)数据成员在类内部
  2. 静态(static)在类外部
  3. 静态函数(static)和非静态函数(nonstatic)在类外部
  4. 虚函数(virtual):
    a. 每个类产生一堆指向虚函数的指针,放在虚表(virtual table, vtbl)
    b. 每个类对象添加一个指向虚表的指针(vptr)。
    c. 每个类的type_info(用于支持RTTI)也由虚表指定,一般位于第一个slot处。
class Point2d
{Point2d(float x, float y):m_x(x), m_y(y),m_pointCount(2){}virtual ~Point2d(){}static int getPointCount(){return m_pointCount;}print(){printf("(%f, %f)", m_x, m_y);}private:float m_x;float m_y;static int m_pointCount;
};

上述代码的C++对象模型如下

+---------------+
|  float m_x;   |            virtual table
+---------------+
|  float m_y;   |          +---------------+
+---------------+          |               |      +--------------------+
|  vptr Point2d +---------->               +------> type_info(RTTI     |
+---------------+          +---------------+      +--------------------+|               |      +--------------------+Point2d pt2;            |               +------> Point2d::~Point2d()|+---------------+      +--------------------++-------------------------------------+       +------------------------------------+
| static int Point2d::m_pointCount    |       | Point2d::Point2d(float x, float y) |
+-------------------------------------+       +------------------------------------++-------------------------------------+       +------------------------------------+
| static int Point2d::getPointCount() |       | Point2d::print()                   |
+-------------------------------------+       +------------------------------------+

Reference:

  1. 深度探索C++对象模型
http://www.yayakq.cn/news/636711/

相关文章:

  • 企业网站需要什么功能网站怎么做分享链接
  • 网站制作公司前景网络运营是干什么的
  • 西安网站制作服务商开网店货源从哪里找最好
  • 巴青网站制作用jsp和mysql做网站
  • 深圳坪山网站建设公司用jsp做学校网站
  • 网站广告赚钱吗微网站建设微网站建设
  • 扁平化手机网站wordpress稳定吗
  • 用书籍上的文章做网站更新iis新建网站
  • 网站建设公司dyfwzx专门做dm单的网站
  • 自己做电商网站.wordpress放tomcat
  • 百度商桥的代码放到网站里中铁建设
  • 江西锐安建设工程有限公司网站深圳家居网站建设
  • 长春网站建设机构2022年小规模企业所得税怎么征收
  • 成都微网站系统东莞市疾控中心官网
  • 一家装修的网站怎么做的做外汇门户网站
  • 博物馆网站做的好的怎样制作一个网页
  • 重庆智能建站模板网站建设卖花网站的目的
  • 广州十度网络网站开发最好wordpress下载资源站主题
  • 广告毕业设计作品网站wordpress前台图片
  • wordpress智能推荐插件济南专业seo推广公司
  • 检测网站开发语言wordpress小程序模版
  • 在线网站备案外贸通道支持asp的网站吗
  • 怎样给网站做百度推广无锡品牌网站建设介绍
  • 工业设计相关网站网络营销专业就业前景
  • 网站优化改动怎么做wordpress 4.5 ueditor1.4.3.3
  • 英文网站源码wordpress启动慢
  • 网站内链结构是什么意思西安市精神文明建设网站
  • 长沙网页建站大庆油田建设集团网站
  • 大连网站建设解决方案wordpress修改模板注册
  • 销售手机网站wordpress显示文章时分秒代码