栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

3.2:Data Member的布局 && 3.3:Data member的存取

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

3.2:Data Member的布局 && 3.3:Data member的存取

考虑如下代码:

class Point3d {
private:
    float x;
    static List *freeList;
    float y;
    static const int chunkSize = 250;
    float z;
};

Nonstatic data member在class object中排列顺序將和被声明的顺序一样,任何中间介入的static data member都不会放进对象布局之中;static data members存放在data segment中


考虑如下代码:

Point3d origin, *pt = *origin;
origin.x = 0.0;
pt->x = 0.0;
static date Members

每一个static data member只有一个实体,存在在程序的data segment之中,每次程序调用static member,就会被内部转化为对该唯一的extern实体直接操作,例如:

// origin.chunkSize = 250;
Point3d::chunkSize = 250;

// pt->chunkSize = 250;
Point3d::chunkSize = 250;

从指令执行观点来看,这是C++语言中"通过一个指针和通过一个对象来获取member",结论完全相同的唯一一种情况;

nonstatic data members

nonstatic data members直接存放在每一个class object之中,只要程序员在一个member function中直接处理一个nonstatic data member,所谓implicit class object就会发生

Point3d Point3d::transalte(const Point3d &pt) {
	x += pt.x;
	y += pt.y;
	z += pt.z;
}

表面上看到对于x,y,z的直接存取,事实上是经由一个implicit class object(this指针)完成的

Point3d Point3d::transalte(Point3d *const int,const Point3d &pt) {
	x += pt.x;
	y += pt.y;
	z += pt.z;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951594.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号