深度探索C++对象模型
文章平均质量分 82
BigoSprite
这个作者很懒,什么都没留下…
展开
-
2.2 Copy constructor的构造操作
一、三种情况下的“一个object的内容会作为另一个object对象的初值”1.显式赋初值 class X{ ... }; X x; X xx = x;2. 作为函数形参 void func(X x);void bar() { X x; //... func(x); //...原创 2016-10-07 12:33:50 · 664 阅读 · 0 评论 -
2.3 程序转化语意学
一、显式的初始化操作X x0;void foo_bar(){ X x1(x0); X x2 = x0; X x3 = X(x0);}二、参数的初始化把一个class object当做参数传给一个函数(或者作为一个函数的返回值),相当于以下操作:X xx = arg;其中,xx代表形式参数或返回值,arg为真正的参数值(即实参)。下面这样的调用方式:// 已知foo函原创 2016-10-08 20:17:10 · 454 阅读 · 0 评论 -
2.4 成员初始化列表
当你写下一个constructor时,你就有机会设定class members的初值。要不就是在member initialization list,要不就是在constructor函数本体之内进行初始化。除了以下四种情况,你的任何选择其实都差不多。下面来看看这四种情况下的微妙的陷阱。下面代码片段中的初始化方法是最常见的一种初始化方法,程序可以被 正确运行,但效率不高。class Word{原创 2016-10-07 15:38:17 · 422 阅读 · 0 评论 -
4.1 Member Function的各种调用方式
一、初探Static Member已知Point3d类包含三个data members:float _x, _y, _z;和两个member functions: normarlize()和magnitude()。其中,成员函数的的定义如下:Point3d Point3d::normarlize() const{ register float mag = magnitude();原创 2016-10-08 12:32:07 · 894 阅读 · 0 评论 -
4.2 Virtual Member Functions(虚拟成员函数)
一、两个基本概念我们已经讨论过virtual function的一般实现模型:每个class 有一个virtual table,内含该class中有作用的virtual function的地址,然后每一个object有一个vptr,指向virtual table的所在。在C++中,多态表示“以一个public base class的指针(或引用),寻址出一个derived class object“原创 2016-10-08 15:48:27 · 809 阅读 · 0 评论 -
2.1 Default Constructor的构造操作
编译器何时会自动产生一个default constructor?编译器自动合成的default constructor将会初始化nonstatic member data?程序设计者什么时候需要显式地提供default constructor?程序设计者显式地提供了default constructor,编译器就不再做什么了吗?那么,到底Default Constructor的构造操作是如何运转的呢原创 2016-10-09 11:09:08 · 943 阅读 · 0 评论 -
3.2 Data Member的布局
一、预热在讨论Data Member布局之前,先看比较常见的笔试题目: 1、 空class class X{};sizeof(X) : 1。空的class中没有任何data member,大小不应该是0吗?大小之所以为1,是因为编译器安插进去一个char,所以空class实际上隐藏1字节的大小。 2、没有virtual 成员函数的classclass Point3d{public:原创 2016-10-09 15:04:11 · 674 阅读 · 0 评论 -
3.4 “继承”与Data Member
一、基本Class模型在C++继承模型中,一个derived class object所表现出来的东西,是其自己的members加上其base class(es) members的总和。置于derived class members和base class(es) members的排列顺序,则未在C++ Standard中强制指定:理论上编译器可以自由安排之。在大部分编译器的上头,base class原创 2016-10-09 17:17:38 · 671 阅读 · 0 评论 -
3.3 Data Member的存储
一、Static Data MembersStatic data members,处于class之外,存放在程序的data segment之中。每一个static data member只有一个实例,并被视为一个global变量(但是只在class生命范围内可见)。static data member经常通过类名和“作用域运算符”调用静态数据成员,也可以通过 class object(虽然经常不需要原创 2016-10-09 21:10:11 · 440 阅读 · 0 评论