《你必须知道的222个C++语言问题》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:范立锋,李世欣编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2010
  • ISBN:9787115224965
  • 页数:377 页
图书介绍:本书以问答的形式组织内容,讨论了学习或使用C++语言的过程中经常遇到的一些问题。书中列出了C++用户经常问的220多个经典问题,并分别给出了正确的回答,而且结合代码示例阐明要点,为程序员提供了实践指南。

第1章 C++与C语言的区别和联系 1

FAQ1.01 C++与C语言比较有哪些特点? 1

FAQ1.02 C++与C语言的代码注释风格有什么不同? 2

FAQ1.03 C++与C语言的程序结构有何不同? 3

FAQ1.04 C++与C语言是如何处理输入与输出的? 5

FAQ1.05 C++中局部变量的声明方式是否与C语言相同? 7

FAQ1.06 在函数原型的使用方面,C++与C语言是否一致? 8

FAQ1.07 在常量的定义方面,C++与C语言有何不同? 10

FAQ1.08 C语言允许函数重载么?C++对于函数重载做出了哪些规定? 11

FAQ1.09 处理动态存储分配问题时C++与C语言有何不同? 13

第2章 面向对象的设计思想 15

FAQ2.01 为什么采用面向对象编程模式? 15

FAQ2.02 面向对象技术包含哪些基本概念? 16

FAQ2.03 面向对象技术的基本特征包括哪些? 18

FAQ2.04 为什么封装对面向对象来说很重要? 20

FAQ2.05 接口与实现的分离有什么好处? 21

FAQ2.06 抽象是什么? 22

FAQ2.07 封装与抽象有何联系? 23

FAQ2.08 继承是否会削弱封装机制? 24

FAQ2.09 组合是怎样定义的,它有什么作用? 25

FAQ2.10 组合的类型都包括哪些? 26

FAQ2.11 如何理解动态特性? 27

第3章 C++中的类和对象 29

FAQ3.01 如何理解类和对象? 29

FAQ3.02 如何理解对象的初始化? 32

FAQ3.03 如何理解对象的生存周期? 35

FAQ3.04 如何向函数传递对象? 37

FAQ3.05 编写C++类时需要注意哪些问题? 40

FAQ3.06 如何理解构造函数? 42

FAQ3.07 默认构造函数是什么,它有什么特点? 44

FAQ3.08 何时调用拷贝构造函数? 46

FAQ3.09 深拷贝与浅拷贝的区别是什么? 49

FAQ3.10 如何理解析构函数? 51

FAQ3.11 程序如何处理静态成员变量及静态成员函数? 54

FAQ3.12 为什么使用友元?如何使用? 56

FAQ3.13 使用友元有什么优点? 58

第4章 继承 60

FAQ4.01 如何理解C++中的继承? 60

FAQ4.02 C++程序的继承结构是怎样的? 61

FAQ4.03 当派生类与基类成员名称冲突时应如何解决? 64

FAQ4.04 为什么要使用虚基类? 65

FAQ4.05 继承体系中构造函数的调用顺序是怎样的? 67

FAQ4.06 在继承中如何使用public、private以及protected关键字? 69

FAQ4.07 类的默认访问权限是什么?为什么使用它作为默认权限? 71

FAQ4.08 为什么要使用protected关键字?如何使用? 72

FAQ4.09 为什么派生类不能访问其基类的private成员? 73

FAQ4.10 struct与class之间有什么不同? 74

FAQ4.11 如何为基类构造函数传递参数? 75

第5章 多态 78

FAQ5.01 如何理解C++中的捆绑? 78

FAQ5.02 如何理解和使用虚函数? 79

FAQ5.03 如何理解和使用纯虚函数? 81

FAQ5.04 如何理解和使用抽象类? 82

FAQ5.05 多态是如何实现的? 84

FAQ5.06 如何理解静态多态与动态多态? 86

FAQ5.07 如何理解虚函数和构造函数? 86

FAQ5.08 如何理解虚函数和析构函数? 87

第6章 指针与字符串 89

FAQ6.01 如何理解sizeof操作符? 89

FAQ6.02 指针是什么? 90

FAQ6.03 如何理解地址和指针的关系? 91

FAQ6.04 如何使用取地址操作符&? 92

FAQ6.05 指针与取地址操作符&怎样结合使用? 93

FAQ6.06 如何将指针与间接寻址操作符*结合使用? 94

FAQ6.07 指针的运算有哪些? 95

FAQ6.08 指针变量与引用有什么区别? 96

FAQ6.09 指针变量与变量指针有什么区别? 97

FAQ6.10 指针的比较指的是什么? 97

FAQ6.11 如何理解多级指针? 98

FAQ6.12 如何使用函数指针? 100

FAQ6.13 如何理解指针函数? 101

FAQ6.14 在指针中如何使用const限定符? 102

FAQ6.15 指针和数组之间有什么联系? 104

FAQ6.16 如何理解指针数组? 106

FAQ6.17 使用指针时有哪些常见的错误? 107

FAQ6.18 字符和字符串有什么区别? 109

FAQ6.19 常用的字符串操作函数有哪些? 110

FAQ6.20 如何理解字符数组和字符指针? 113

第7章 运算符重载 116

FAQ7.01 为什么使用运算符重载? 116

FAQ7.02 使用运算符重载应遵循哪些规则? 119

FAQ7.03 哪些运算符不能重载?哪些可以重载? 121

FAQ7.04 为什么要使用友元函数重载运算符? 122

FAQ7.05 使用友元函数重载“++”、“--”运算符时可能会出现什么问题? 125

FAQ7.06 如何实现NEW和DELETE运算符的重载? 127

FAQ7.07 如何重载数组下标运算符? 129

FAQ7.08 如何将运算符函数作为成员函数使用? 131

FAQ7.09 成员运算符函数与友元运算符函数有什么区别? 133

第8章 用户自定义数据类型、结构和枚举 135

FAQ8.01 如何定义结构类型及结构声明? 135

FAQ8.02 对于无名结构是如何使用的? 137

FAQ8.03 如何通过点操作符访问结构? 138

FAQ8.04 结构数组是如何定义及使用的? 140

FAQ8.05 如何定义及使用结构中的结构? 142

FAQ8.06 如何使用多重结构嵌套? 144

FAQ8.07 如何将结构地址传递给函数? 146

FAQ8.08 什么是枚举类型?如何使用枚举类型? 148

第9章 类型转换与RTTI 151

FAQ9.01 C++预定义的类型转换有哪些方式? 151

FAQ9.02 如何实现类这种数据类型与其他数据类型的转换? 152

FAQ9.03 为什么需要转换函数?如何创建转换函数? 156

FAQ9.04 C++新定义了哪几个强制转换运算符?作用分别是什么? 158

FAQ9.05 如何区分静态类型检查和动态类型检查? 161

FAQ9.06 为什么要避免使用动态类型检查? 162

FAQ9.07 什么是运行时类型标识? 163

FAQ9.08 什么是downcast? 166

FAQ9.09 为什么向下的类型转换是危险的? 168

FAQ9.10 dynamic_cast〈T〉()函数的作用是什么? 168

FAQ9.11 static_cast〈T〉()函数的作用是什么? 170

FAQ9.12 typeid()函数的作用是什么? 172

第10章 异常处理 175

FAQ10.01 C++异常处理的原理是什么? 175

FAQ10.02 异常处理是如何实现的? 176

FAQ10.03 使用异常时应该注意哪些方面? 182

FAQ10.04 抛出的异常和捕获的异常是否必须匹配? 185

FAQ10.05 如何处理TRY语句中函数抛出的异常? 186

FAQ10.06 程序在何时执行CATCH语句? 188

FAQ10.07 一个TRY语句是否可以使用多个CATCH语句?如何使用? 189

FAQ10.08 对异常使用省略符有什么作用? 191

FAQ10.09 THROW语句具体有什么作用? 193

FAQ10.10 如何实现重新抛出异常? 194

FAQ10.11 构造和析构对象时产生的异常应该如何处理? 196

FAQ10.12 如何使用默认函数参数避免异常和错误的发生? 197

FAQ10.13 处理异常时terminate()函数和unexpected()函数分别有什么作用? 198

第11章 标准模板库 201

FAQ11.01 什么是标准模板库?为什么要使用标准模板库? 201

FAQ11.02 标准模板库包含哪些头文件? 202

FAQ11.03 如何理解容器? 204

FAQ11.04 标准模板库中容器的存储方式和访问方式 206

FAQ11.05 标准模板库中的容器是如何实现的? 207

FAQ11.06 标准模板库支持哪几个序列容器? 208

FAQ11.07 关联容器是如何工作的? 209

FAQ11.08 迭代器在标准模板库设计中有什么重要作用? 211

FAQ11.09 如何理解输入输出迭代器? 213

FAQ11.10 STL包含哪些算法? 215

FAQ11.11 向量是什么?如何使用向量? 218

FAQ11.12 如何构造一个LIST类型的对象? 221

FAQ11.13 如何为链表插入对象、移除对象以及为对象赋值? 223

FAQ11.14 如何遍历链表对象? 224

FAQ11.15 SLIST和LIST有何区别? 225

FAQ11.16 什么是DEQUE容器?如何使用这种容器? 226

FAQ11.17 如何对DEQUE容器使用REVERSE迭代器? 228

FAQ11.18 如何管理DEQUE队形的大小? 230

FAQ11.19 如何理解MAP对象? 231

FAQ11.20 如何使用成员函数管理MAP? 232

FAQ11.21 如何控制MAP对象的大小及内容? 238

FAQ11.22 如何理解SET? 239

第12章 通用函数及模板 242

FAQ12.01 如何理解模板? 242

FAQ12.02 如何显式重载通用函数? 244

FAQ12.03 什么情况下不能使用通用函数代替重载函数? 246

FAQ12.04 多个文件之间是否可以编译相同的函数模板定义? 247

FAQ12.05 类模板和模板类之间有什么关系? 248

FAQ12.06 当函数模板与同名非函数模板函数重载时如何进行调用? 249

FAQ12.07 如何使用模板定义通用类? 250

FAQ12.08 是否可以创建含有多个通用数据类型的通用类? 252

FAQ12.09 创建含有参数的操作符需要注意什么? 253

FAQ12.10 在函数模板中如何使用数组作为参数? 256

第13章 C++中的输入与输出 261

FAQ13.01 为什么C++建立自己的输入输出系统? 261

FAQ13.02 如何设置并清除ios标志? 262

FAQ13.03 如何检测当前格式标志? 264

FAQ13.04 如何重载setf()函数? 265

FAQ13.05 如何使用操作符格式化I/O? 266

FAQ13.06 如何重载“〈〈”? 267

FAQ13.07 如何创建自定义的插入符? 269

FAQ13.08 如何打开文件流? 272

FAQ13.09 如何读写文本文件? 273

FAQ13.10 如何读写二进制文件? 275

FAQ13.11 如何实现每次读取一行文件? 277

FAQ13.12 如何检测文件是否结束? 278

FAQ13.13 如何控制输入输出格式? 280

FAQ13.14 如何创建自定义的提取运算符? 284

FAQ13.15 如何创建无参操作符? 286

FAQ13.16 如何创建带参数的操作符? 287

FAQ13.17 如何实现随机访问? 287

FAQ13.18 如何理解C++的I/O状态? 289

第14章 内存管理 291

FAQ14.01 内存分配方式包括哪几种? 291

FAQ14.02 常见的内存错误有哪些?如何解决? 293

FAQ14.03 指针参数如何传递内存? 295

FAQ14.04 free()和delete()函数如何操作指针? 296

FAQ14.05 对同一指针执行两次删除操作会发生什么? 297

FAQ14.06 动态内存是否会被自动释放? 298

FAQ14.07 当p指向数组时能否执行delete p的操作? 299

FAQ14.08 malloc()/free()函数的使用要点有哪些? 300

FAQ14.09 new()/delete()函数的使用要点有哪些? 301

FAQ14.10 new()/delete()函数与malloc()/free()函数有什么不同? 303

FAQ14.11 new有哪些使用方式? 305

FAQ14.12 如何在预定内存位置建立对象?如何释放该对象占用的空间? 308

FAQ14.13 如何应对内存耗尽问题? 309

FAQ14.14 定义了p=new M(),如果M构造函数抛出异常是否会出现内存泄漏? 310

FAQ14.15 在使用“delete this;”操作时必须注意哪些问题? 311

FAQ14.16 如何释放一个没有明确析构函数对象所占用的空间? 312

FAQ14.17 最简单的防止内存泄漏的方法是什么? 313

第15章 进程及线程 315

FAQ15.01 如何更好地理解进程? 315

FAQ15.02 如何创建进程? 316

FAQ15.03 如何结束进程? 320

FAQ15.04 为什么要使用子进程?如何使用子进程? 321

FAQ15.05 如何更好地理解线程? 322

FAQ15.06 何时需要创建线程?何时不需要创建线程? 324

FAQ15.07 如何使用CreateThread()函数创建简单线程? 325

FAQ15.08 操作系统创建线程分哪几步? 326

FAQ15.09 如何确定线程堆栈的大小? 327

FAQ15.10 如何获得当前线程或进程的句柄? 328

FAQ15.11 如何使用GetThreadTimes()函数获得线程的执行时间? 330

FAQ15.12 GetProcessTimes()和GetThreadTimes()函数有何不同? 331

FAQ15.13 如何更好地理解GetQueueStatus()函数? 335

FAQ15.14 如何处理无句柄的异常? 336

FAQ15.15 如何结束线程? 337

FAQ15.16 如何确定线程或进程的ID? 339

FAQ15.17 操作系统如何安排线程? 340

FAQ15.18 如何理解Windows系统的优先级类? 341

FAQ15.19 如何改变进程的优先级类? 342

FAQ15.20 如何设置线程的相对优先级? 344

FAQ15.21 如何获取线程的当前优先级? 345

FAQ15.22 如何获取线程的上下文? 347

FAQ15.23 线程的暂停及继续是如何实现的? 347

FAQ15.24 什么是线程同步? 348

FAQ15.25 Windows系统支持的最常见的同步对象包括什么? 350

FAQ15.26 如何创建并使用简单的临界区? 351

FAQ15.27 WaitForSingleObject()和WaitForMultipleObject()函数有何区别? 353

FAQ15.28 如何创建并使用互斥体? 357

FAQ15.29 如何理解信号量? 360

第16章 C++与C语言的结合应用 361

FAQ16.01 C++程序如何调用C程序? 361

FAQ16.02 C程序如何调用C++程序? 363

FAQ16.03 当C++程序代码中包含C程序代码应该注意什么? 364

FAQ16.04 如何将C++类的对象传递给C语言的函数? 365

FAQ16.05 C++的“iostream”和C语言的“stdio.h”是否可以一起使用? 367

FAQ16.06 C++的“iostream”和C语言的“stdio.h”比较有什么优势? 368

第17章 关于软件性能的思考 370

FAQ17.01 为什么编码方式会影响软件性能? 370

FAQ17.02 在不需要变量i原数值的情况下,i++和++i哪个更好? 371

FAQ17.03 为什么使用最终类和最终成员函数能提高软件性能? 372

FAQ17.04 为什么成员对象能提高软件性能? 373

FAQ17.05 C++程序中如何从指针、引用的角度提高软件性能? 374

FAQ17.06 想要提高软件性能需要从哪几方面入手? 376