- 博客(10)
- 资源 (4)
- 收藏
- 关注
原创 Inside the C++ Object Model学习笔记[Chap3.4]
3.4 继承与数据成员在C++继承模型中,派生类对象所表现出来的东西是其增加的成员加上其基类成员的总和,至于基类与派生类成员的排列次序则没有强制规定。本节讨论继承对类的影响,分如下几种情况:3.4.1 单继承且不含虚函数一般而言,具体继承(相对于虚拟继承)并不会增加空间(注意边界对齐准则)或存取时间上的额外负担。将独立的类凑成一对“type/subtype”,并带有继承关系,一般易
2006-09-04 22:26:00 973 1
原创 Inside the C++ Object Model学习笔记[Chap3.1-3.3]
3.1 数据成员的绑定1. 全局数据与类内部数据成员的关系:类内部对于内联成员函数的数据成员绑定操作会在整个类声明完成之后才发生,即屏蔽了全局数据;2. 类成员函数的参数表问题:参数表中的名称在其第一次出现时被适当地决议完成,这样可能会造成外部名称与嵌套类型名称相冲突,如下例中的length在两个成员函数中都被决议为全局类型int,当后续包涵length的嵌套类型声明出现时,就将稍早的绑定
2006-09-04 22:22:00 852
原创 Inside the C++ Object Model学习笔记[Chap3.0]
3.0 引言分析如下类的继承体系:class X { …… };class Y : public virtual X { …… };class Z : public virtual X { …… };class A : public Y, public Z { …… };执行sizeof( ClassName )结果为1,8,8,12(未优化)或1,4,4,
2006-09-04 22:20:00 840
原创 Inside the C++ Object Model学习笔记[Chap2.4]
2.4 成员初始化列表对于类成员的初始化,可以采用成员初始化列表或者在构造函数体内两种方式,而且差异不大,但在如下四种情况下,必须使用成员初始化列表(因为效率的原因):1. 初始化一个引用成员时;2. 初始化一个const成员时;3. 调用一个基类的构造函数,但它拥有一组参数时;4. 调用一个成员类的构造函数,但它拥有一组参数时。使用成员初始化列表的注意事项:1. 初始
2006-09-04 22:18:00 926
原创 Inside the C++ Object Model学习笔记[Chap2.3]
2.3 程序转换语意学2.3.1 显式初始化class X { …… };X x0;X x1( x0 );X x2 = x0;X x3 = X( x0 );程序转化分为两个阶段:1. 重写每一个定义,将其中的初始化操作剥离;2. 将类X的拷贝构造函数调用安插到代码中,伪码如下:X x1;X x2;X x3;x1.X::X( x0 );
2006-09-04 22:17:00 852
原创 Inside the C++ Object Model学习笔记[Chap2.2]
2.2 Copy Constructor建构操作2.2.1 调用Copy Constructor的三种情况1. 用一个类对象的内容对另一个对象作明确的初始化操作,如①;2. 当对象被当作参数传给某个函数时,如②;3. 当函数传回一个类对象时,如③;class X { …… };void func( X x ) { …… }X func() {
2006-09-04 22:14:00 940
原创 Inside the C++ Object Model学习笔记[Chap2.1]
2.1 Default Constructor建构操作全局对象的内存(数据区)会在程序激活的时候清为0,局部对象的内存(栈区)以及堆对象的内存(自由存储区)都不一定清0,其内存为上次使用后的遗迹。根据C++ Standard,对于类X,如果没有任何用户声明的构造函数,那么编译器将会隐式地产生一个默认构造函数,但不作任何动作,被喻为trivial构造函数,与之相对应的,编译器隐式产生的
2006-09-04 22:11:00 948
原创 Inside the C++ Object Model学习笔记[Chap1.3]
1.3 对象的差异1.3.1 C++支持三种程序设计范型 1. 过程型(procedural model):C语言作为典型,按照任务流程一一处理; 2. 抽象数据类型模型(ADT/Object-Based):通过一组公共接口操作,但其运算定义并不对外公开,程序员处理的是一个拥有固定而单一类型的实体; 3. 面向对象模型(OO):模型中存在一些彼此相关的类型,通过一个抽象的基
2006-09-04 22:08:00 884
原创 Inside the C++ Object Model学习笔记[Chap1.2]
1.2 关键字带来的差异本节主要讨论struct与class带来的困扰问题,综合struct与class的比较如下:1. C++中struct具有了“类”的功能,其与关键字class的区别在于struct中成员变量和函数的默认访问权限为public,而class的为private;2. C++中的struct保持了对C中struct的全面兼容,因而,下面的操作是合法的:struct st
2006-09-04 22:04:00 835
原创 Inside the C++ Object Model学习笔记[Chap1.1]
1.1 C++对象模型 本节主要叙述了简单对象模型,表格驱动对象模型以及cfront中采用的对象模型特征,但是并未描述虚拟继承与引入多态的模型,将其留待3.4节。 C++中类具有两种数据成员――static与non-static,三种成员函数――static, non-static与virtual,如下例所示(同时也是本节关于不同对象模型图示的来源):class Point{ public:
2006-09-04 22:00:00 1092
Inside the C++ Object Model (英文版)
2010-09-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人