Inside The C++ Object Model(一)
============================================================================
1-1. 关键字struct和class的一点区别:
(1)struct内部默认public属性,class内部成员默认private属性;
(2)template中只能使用class来抽象类型参数,不能使用struct,template并不打算和C兼容。
1-2. C程序员有时会把单一元素的数组放在一个struct的尾端,于是每个struct objects可以拥有可变大小的数组。
struct memble{
/* */
char pc[];
};
在这里,如果我们改用class来声明,则可能不行。C++中凡处于同一个access section的数据,必定保证以其声明次序出现在内存布局当中。然而被放置在多个access sections(public,protected,private)中的各笔数据,排列次序就不一定了。同样道理,base classes和derived classes的data members的布局也没有谁先谁后的强制规定,因而也就不能保证前述的C伎俩一定有效。Virtual functions的存在也会使前述伎俩的有效性成为一个问号。最好的忠告就是:不要那么做。
class stumble{
public:
// operations ...
protected:
// protected stuff
private:
/*private stuff*/
char pc[];
};
注:组合,而非继承,才是把C和C++结合在一起的唯一可行方法。C struct在C++中的一个合理用途,是当你要传递“一个复杂的class object的全部或部分”到某个C函数中去时,struct声明可以将数据封装起来,并保证拥有与C兼容的空间布局。然而这项保证只在组合的情况下才存在。如果是“继承”而不是“组合”,编译器会决定是否应该有额外的data members被安插到base struct subobject之中。
============================================================================
1-3. 你可以直接或间接处理继承体系中的一个base class object,但只有通过pointer或reference的间接处理,才支持OO程序设计所需要的多态性质。如下:
// 描述objects:不确定类型
Library_materials *px = retrieve_some_material();
Library_materials &rx = *px;
// 描述已知物:不可能有令人惊讶的结果产生
Library_materials dx = *px;
你没有办法确定地说出px或rx到底指向何种类型的objects,你只能够说它要不就是Library_materials object,要不就是后者的一个子类型(subtype)。不过,我们倒是可以确定,dx只能是Library_materials class的一个objects。
============================================================================
1-4. C++对象模型(内存布局)







============================================================================
Inside The C++ Object Model(一)的更多相关文章
- C++学习书籍推荐《Inside the C++ Object Model》下载
百度云及其他网盘下载地址:点我 作者简介 Stanley B. Lippman is Architect with the Visual C++ development team at Microso ...
- inside the C++ Object model总结
一. 关于对象 1.内联函数:能够除去函数调用的开支,每一处内联函数的调用都是代码的复制.这是一种空间换取时间的做法,若函数代码量大或者有循环的情况下,不宜内联(这件事有些编译器会自动帮你做).在类中 ...
- 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记
转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本: class并没有增加成本,data members直接内含在每一个c ...
- Inside The C++ Object Model - 03
object Lessons 1.C++中布局以及存取时间上的的额外负担是由virtual引起的:virtual function.virtual base class.或是由于多继承引起的. 2.C ...
- Inside The C++ Object Model(五)
============================================================================5-0. 一般而言,class 的data me ...
- Inside The C++ Object Model(四)
============================================================================4-1. Member 的各种调用方式静态成员函 ...
- Inside The C++ Object Model(三)
============================================================================3-0. 类所占的内存大小受到三个因素的影响:( ...
- Inside The C++ Object Model(二)
============================================================================2-0. 关键字explicit被引入C++,提 ...
- Inside The C++ Object Model - 04 C++对象模型的一个简单示例
首先定义一个类X class X { public: X(); X(const X& x); virtual ~X(); virtual foo(); } 再来一段代码: X foobar() ...
随机推荐
- 使用JCOOKIES创建http cookie
jCookies,一个功能强大的操作http cookie的jquery插件,他能够让你存储任何数据类型如:字符串,数组,对象等.它通过JavaScript存储Cookies,然后通过服务器端代码如: ...
- jq 回车提交指定按钮
$(this).keydown(function (e) { var key = window.event ? e.keyCode : e.which; ") { $("#Main ...
- MySql之存储过程的使用
一:创建存储过程 1:简单存储过程 CREATE PROCEDURE 存储过程名() BEGIN SQL操作 END; 2:使用参数的存储过程 CREATE PROCEDURE 存储过程名(IN in ...
- ROS nodelet的使用
ROS是一种基于分布式网络通讯的操作系统,整个机器人控制系统是由一个Master主节点和若干个功能相对独立的Node子节点组成,这也是ROS系统最主要的特点就是分布式以及模块化的设计.在ROS通讯过程 ...
- windows10多桌面创建 切换 和分屏
windows键+Tab 可以创建和切换新的桌面 win+ctrl+左右箭头 可以切换桌面 Aero Snap是Win7时代增加的一项窗口排列功能,俗称“分屏”.一个最简单例子,就是当你把窗口拖至屏幕 ...
- 关于PHP中的webshell
一.webshell简介 webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门.黑客在入侵了一个网站后,通常会将asp或php后门文 ...
- Linux 内存机制【转载】
原文地址:http://blog.csdn.net/tianlesoftware/article/details/5463790 一. 内存使用说明 Free 命令相对于top 提供了更简洁的查看系统 ...
- 12.翻译系列:EF 6 中配置一对多的关系【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-f ...
- ORACLE物化视图(物理视图)
百度文库 http://wenku.baidu.com/view/f78f55c68bd63186bcebbc4b.html ORACLE物化视图 一.------------------------ ...
- 升级python(linux)
查看系统当前python版本 2: [root@wangyuelou ~]# python Python 2.4.3 (#1, May 5 2011, 16:39:10) [GCC ...