给大家带来的一篇关于C++相关的电子书资源,介绍了关于C++、对象模型方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小11 MB,(美) Stanley B. Lippm编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:8.8。
内容介绍
创作者Lippman参加设计方案了全球第一套C++编译程序cfront,这本书便是一位杰出的C++编译程序设计师向你论述他如何处理各种各样explicit(确立出現于C++程序代码中)和implicit(掩藏于程序代码身后)的C++语意。
《深度探索C++对象模型》致力于C++面向对象编程编程设计的底层体制,包含化学结构式语意、暂时性目标的转化成、封裝、承继,及其虚拟——虚拟涵数和虚拟承继。这本书让你了解:一旦你可以掌握底层完成实体模型,你的程序代码将得到多么的大的高效率。Lippman回应了这些有关C++附加负载与复杂性的各种各样错误报告和知识点,但也指出在其中一些成本费和权益互换的确存有。他论述了各种各样的完成实体模型,指出他们的超进化之道以及实质要素。书里包含了C++领域模型的语意暗示着,并指出这一实体模型是怎样危害你的程序流程的。
针对C++底层体制很感兴趣的阅读者,这必定是一本给你大呼舒服的绝佳好书推荐。
目录
-
本立道生(侯捷 译序) III
-
目录 VII
-
前言(Stanley B. Lippman) XIII
-
第0章 导读(译者的话) XXV
-
第1章 关于对象(Object Lessons) 1
-
加上封装后的布局成本(Layout Costs for Adding Encapsulation) 5
-
1.1 C++对象模式(The C++ Object Model) 6
-
简单对象模型(A Simple Object Model) 7
-
表格驱动对象模型(A Table-driven Object Model) 8
-
C++对象模型(The C++ Object Model) 9
-
对象模型如何影响程序(How the Object Model Effects Programs) 13
-
1.2 关键词所带来的差异(A Keyword Distinction) 15
-
关键词的困扰 16
-
策略性正确的struct(The Politically Correct Struct) 19
-
1.3 对象的差异(An Object Distinction) 22
-
指针的类型(The Type of a Pointer) 28
-
加上多态之后(Adding Polymorphism) 29
-
第2章 构造函数语意学(The Semantics of Constructors) 37
-
2.1 Default Constructor的构造操作 39
-
“带有Default Constructor”的Member Class Object 41
-
“带有Default Constructor”的Base Class 44
-
“带有一个Virtual Function”的Class 44
-
“带有一个Virtual Base Class”的Class 46
-
总结 47
-
2.2 Copy Constructor的构造操作 48
-
Default Memberwise Initialization 49
-
Bitwise Copy Semantics(位逐次拷贝) 51
-
不要Bitwise Copy Semantics! 53
-
重新设定Virtual Table的指针 54
-
处理Virtual Base Class Subobject 57
-
2.3 程序转化语意学(Program Transformation Semantics) 60
-
显式的初始化操作(Explicit Initialization) 61
-
参数的初始化(Argument Initialization) 62
-
返回值的初始化(Return Value Initialization) 63
-
在使用者层面做优化(Optimization at the User Level) 65
-
在编译器层面做优化(Optimization at the Compiler Level) 66
-
Copy Constructor:要还是不要? 72
-
摘要 74
-
2.4 成员们的初始化队伍(Member Initialization List) 74
-
第3章 Data语意学(The Semantics of Data) 83
-
3.1 Data Member的绑定(The Binding of a Data Member) 88
-
3.2 Data Member的布局(Data Member Layout) 92
-
3.3 Data Member的存取 94
-
Static Data Members 95
-
Nonstatic Data Members 97
-
3.4 “继承”与Data Member 99
-
只要继承不要多态(Inheritance without Polymorphism) 100
-
加上多态(Adding Polymorphism) 107
-
多重继承(Multiple Inheritance) 112
-
虚拟继承(Virtual Inheritance) 116
-
3.5 对象成员的效率(Object Member Efficiency) 124
-
3.6 指向Data Members的指针(Pointer to Data Members) 129
-
“指向Members的指针”的效率问题 134
-
第4章 Function语意学(The Semantics of Function) 139
-
4.1 Member的各种调用方式 140
-
Nonstatic Member Functions(非静态成员函数) 141
-
Virtual Member Functions(虚拟成员函数) 147
-
Static Member Functions(静态成员函数) 148
-
4.2 Virtual Member Functions(虚拟成员函数) 152
-
多重继承下的Virtual Functions 159
-
虚拟继承下的Virtual Functions 168
-
4.3 函数的效能 170
-
4.4 指向Member Function的指针(Pointer-to-Member Functions) 174
-
支持“指向Virtual Member Functions”的指针 176
-
在多重继承之下,指向Member Functions的指针 178
-
“指向Member Functions之指针”的效率 180
-
4.5 Inline Functions 182
-
形式参数(Formal Arguments) 185
-
局部变量(Local Variables) 186
-
第5章 构造、析构、拷贝语意学(Semantics of Construction,
-
Destruction, and Copy) 191
-
纯虚函数的存在(Presence of a Pure Virtual Function) 193
-
虚拟规格的存在(Presence of a Virtual Specification) 194
-
虚拟规格中const的存在 195
-
重新考虑class的声明 195
-
5.1 “无继承”情况下的对象构造 196
-
抽象数据类型(Abstract Data Type) 198
-
为继承做准备 202
-
5.2 继承体系下的对象构造 206
-
虚拟继承(Virtual Inheritance) 210
-
vptr初始化语意学(The Semantics of the vptr Initialization) 213
-
5.3 对象复制语意学(Object Copy Semantics) 219
-
5.4 对象的效能(Object Efficiency) 225
-
5.5 析构语意学(Semantics of Destruction) 231
-
第6章 执行期语意学(Runtime Semantics) 237
-
6.1 对象的构造和析构(Object Construction and Destruction) 240
-
全局对象(Global Objects) 242
-
局部静态对象(Local Static Objects) 247
-
对象数组(Array of Objects) 250
-
Default Constructors和数组 252
-
6.2 new和delete运算符 254
-
针对数组的new语意 257
-
Placement Operator new的语意 263
-
6.3 临时性对象(Temporary Objects) 267
-
临时性对象的迷思(神话、传说) 275
-
第7章 站在对象模型的尖端(On the Cusp of the Object Model) 279
-
7.1 Template 280
-
Template的“实例化”行为(Template Instantiation) 281
-
Template的错误报告(Error Reporting within a Template) 285
-
Template中的名称决议法(Name Resolution within a Template) 289
-
Member Function的实例化行为(Member Function Instantiation) 292
-
7.2 异常处理(Exception Handling) 297
-
Exception Handling快速检阅 298
-
对Exception Handling的支持 303
-
7.3 执行期类型识别(Runtime Type Identification,RTTI) 308
-
Type-Safe Downcast(保证安全的向下转换操作) 310
-
Type-Safe Dynamic Cast(保证安全的动态转换) 311
-
References并不是Pointers 313
-
Typeid运算符 314
-
7.4 效率有了,弹性呢? 318
-
动态共享函数库(Dynamic Shared Libraries) 318
-
共享内存(Shared Memory) 318
学习笔记
Java和C++通过new创建的对象有何区别?
前言 本文我们不去谈int、float、char等基本数据类型,而是用一般的类来说明。因为Java中可以直接通过 int varName 的方式来定义和使用一个基本类型的变量,但对于其它一般类型的对象,必须使用 new 来创建。 因此,为了更一般性地分析,体现两种语言创建对象的差异,我们用自定义的类 Student 进行说明,以下内容均针对一般的类而言。 Java 在 Java 中,我们可以通过如下方式定义变量: Student s; //定义标识符s,没有实际空间Student s = new Student(); //定义s,并绑定到新创建的对象 JVM在进行内存管理时,首先会在栈中给dog分配一个空间,当new Dog();后会在堆中开辟对象的实际空间,然后将dog指向堆中的空间,这……
Java中对象与C++中对象的放置安排的对比
Java中对象与C++中对象的放置安排的对比 概要: Java中,所有的对象都存放在堆(Heap,一种通用的内存池)中;而对象的引用是存放在堆栈(Stack)中的。 我们可以通过String直接声明的字符串与new String声明出来的字符串使用equals()和"=="进行的比较,从而理解对象和引用的关系及它们的存储位置。 堆栈是一种快速有效的分配存储方法,仅次于寄存器。创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。 堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。所以,堆比堆栈更加灵活。 Java中的堆栈并不能简单理解为数据结构中的栈,虽然它们……
以上就是本次介绍的C++电子书的全部相关内容,希望我们整理的资源能够帮助到大家,感谢大家对码农之家的支持。
上一篇:Effective C++:改善程序与设计的55个具体做法
下一篇:Effective STL中文版:50条有效使用STL的经验