深度探索c++对象模型
文章平均质量分 90
pmt123456
这个作者很懒,什么都没留下…
展开
-
2.2 Copy Constructor
将一个object的内容作为另一个class object的初值的三种情况:(a)明确的初始化操作class X{...}X x;X xx=x;(b)作为函数的参数extern void foo(X x);void bar(){ X xx; //以xx作为foo()第一个参数的初值(不明显的初始化操作) foo(xx);}(c)作为函数返回值原创 2016-09-23 09:48:56 · 322 阅读 · 0 评论 -
第三章 Data语意学
1、一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值的。看下面的例子class A{ int i;public: A() :i(0){} int f() const { return g() + 1; } int g() const { return i; }};main(){原创 2016-10-10 20:04:09 · 398 阅读 · 0 评论 -
初始化列表
一、必须使用初始化列表的四种情况:1、reference member2、const member3、调用一个base class的constructor,而它拥有一组参数4、调用一个member class的constructor,它拥有一组参数class World{ string name; int cnt;public: World()原创 2016-09-27 13:22:24 · 274 阅读 · 0 评论 -
2.1Default Constructor
一、何时合成Default Constructor及其行为下面程序段不会合成一个default constructor #include #include using namespace std;class Foo{public: int val; Foo *pnext;};void foo_bar() Foo bar; if(b原创 2016-09-21 11:42:25 · 347 阅读 · 0 评论 -
第5章 构造、结构、拷贝、语意学
转自点击打开链接1.即使是一个抽象基类,如果它有非静态数据成员,也应该给它提供一 个带参数的构造函数,来初始化它的数据成员。或许你可以通过其派生 类来初始化它的数据成员(假如nostatic data member为publish或 protected),但这样做的后果则是破坏了数据的封装性,使类的维护和修 改更加困难。由此引申,类的data member应当被初始化,且只在其构造函 数或转载 2016-10-29 20:54:27 · 244 阅读 · 0 评论 -
第四章 function语意学(二)
取一个nontatic data member的地址,得到是member在class布局中的offset;取一个nostatic member function的地址,如果是nonvirtual,则得到他在内存中真正的地址,所有的nonstatic member function都需要对象的地址(this) 指向member function 的指针double (Point::*原创 2016-10-24 21:16:01 · 402 阅读 · 0 评论 -
第四章 function语意学(一)
4-1 Member的各种调用方式Nonstatic Member Functions(非静态成员函数) 非静态成员函数被内化成非成员函数的形式,步骤如下 1.改写函数签名,将this指针作为额外参数,如果成员函数是const函数,要变const class *const this 2.将对非静态数据成员的存取操作改写为经由this指针来存取原创 2016-10-18 21:22:35 · 489 阅读 · 0 评论 -
3.0 对象的大小
class X{};class Y:public virtual X{};class Z:public virtual X{};class A:public Y,public Z{};这段代码作者给出了两种答案,与编译器有关一是二是我在codeblocks上运行得到的C++中对象的大小与以下三个因素有关:1、语言本身所造成的负担,当支持虚基类时,派原创 2016-09-28 20:35:43 · 344 阅读 · 0 评论 -
深度探索C++对象模型
目前看到的最好的一份笔记:点击打开链接转载 2016-12-16 20:37:26 · 311 阅读 · 0 评论