C++ Primer(英文版•第4版)
3推荐 收藏
5.8K阅读
图灵原版计算机科学系列

C++ Primer(英文版•第4版)

终止销售
本书是C++大师Stanley B.Lippman丰富的实践经验和C++标准委员会原负责人José;e Lajoie对C++标准深入理解的完美结合,本版更加入了C++先驱Barbara E.Moo在C++教学方面的真知灼见。本书是久负盛名的C++经典教程,已经帮助全球无数程序员学会了C++。本版对前一版进行了彻底的修订,内容经过了重新组织,既显著改善了可读性,又充分体现了C++语言的最新进展和当前的业界最佳实践。书中不但新增大量教学辅助内容,用于强调重要的知识点,提醒常见的错误,推荐优秀的编程实践,给出使用提示,还包含大量来自实战的示例和习题。
对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使本书成为C++初学者的最佳指南,对于中高级程序员,本书也是不可或缺的参考书。

收藏本书能做什么?

有情况的时候会收到通知,比如电子书发布等。

PS:也会在图灵社区电报频道更新

纸质书
¥99.00

其他购买方式?

出版信息

  • 书  名C++ Primer(英文版•第4版)
  • 系列书名图灵原版计算机科学系列
  • 执行编辑关于本书的内容有任何问题,请联系 傅志红
  • 出版日期2006-09-26
  • 书  号7-115-15169-5
  • 定  价99.00 元
  • 页  数908
  • 开  本16开
  • 出版状态终止销售
  • 原书名C++ Primer
  • 原书号0-201-72148-1

同系列书

目录

Contents
Chapter 1 Getting Started 1
1.1 Writing a Simple C++Program . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Compiling and Executing Our Program . . . . . . . . . . . . . 3
1.2 A First Lookat Input/Output . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.1 Standard Input and Output Objects . . . . . . . . . . . . . . . 6
1.2.2 A Program that Uses the IO Library . . . . . . . . . . . . . . . 6
1.3 A Word About Comments . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4.1 The while Statement . . . . . . . . . . . . . . . . . . . . . . . 12
1.4.2 The for Statement . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.3 The if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.4.4 Reading an Unknown Number of Inputs . . . . . . . . . . . . 18
1.5 Introducing Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.5.1 The Sales_item Class . . . . . . . . . . . . . . . . . . . . . . 21
1.5.2 A First Looka tMember Functions . . . . . . . . . . . . . . . . 24
1.6 The C++Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Part I The Basics 31
Chapter 2 Variables and Basic Types 33
2.1 Primitive Built-in Types . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.1.1 Integral Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.1.2 Floating-Point Types . . . . . . . . . . . . . . . . . . . . . . . . 37
2.2 Literal Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.3.1 What Is a Variable? . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.3.2 The Name of a Variable . . . . . . . . . . . . . . . . . . . . . . 46
2.3.3 Defining Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3.4 Variable Initialization Rules . . . . . . . . . . . . . . . . . . . . 50
2.3.5 Declarations and Definitions . . . . . . . . . . . . . . . . . . . 52
2.3.6 Scope of a Name . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.3.7 Define Variables Where They Are Used . . . . . . . . . . . . . 55
2.4 const Qualifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.5 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.6 Typedef Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.7 Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.8 Class Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.9 Writing Our Own Header Files . . . . . . . . . . . . . . . . . . . . . . 67
2.9.1 Designing Our Own Headers . . . . . . . . . . . . . . . . . . . 67
2.9.2 A Brief Introduction to the Preprocessor . . . . . . . . . . . . . 69
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Chapter 3 Library Types 77
3.1 Namespace using Declarations . . . . . . . . . . . . . . . . . . . . . . 78
3.2 Library stringType . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.2.1 Defining and Initializing strings . . . . . . . . . . . . . . . . 80
3.2.2 Reading and Writing strings . . . . . . . . . . . . . . . . . . 81
3.2.3 Operations on strings . . . . . . . . . . . . . . . . . . . . . . 83
3.2.4 Dealing with the Characters of a string . . . . . . . . . . . . 88
3.3 Library vector Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.3.1 Defining and Initializing vectors . . . . . . . . . . . . . . . . 91
3.3.2 Operations on vectors . . . . . . . . . . . . . . . . . . . . . . 93
3.4 Introducing Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.4.1 Iterator Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.5 Library bitset Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
3.5.1 Defining and Initializing bitsets . . . . . . . . . . . . . . . . 102
3.5.2 Operations on bitsets . . . . . . . . . . . . . . . . . . . . . . 104
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Chapter 4 Arrays and Pointers 109
4.1 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
4.1.1 Defining and Initializing Arrays . . . . . . . . . . . . . . . . . 110
4.1.2 Operations on Arrays . . . . . . . . . . . . . . . . . . . . . . . 113
4.2 Introducing Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
4.2.1 What Is aPointer? . . . . . . . . . . . . . . . . . . . . . . . . . 115
4.2.2 Defining and Initializing Pointers . . . . . . . . . . . . . . . . 116
4.2.3 Operationson Pointers . . . . . . . . . . . . . . . . . . . . . . . 119
4.2.4 Using Pointers to Access Array Elements . . . . . . . . . . . . 122
4.2.5 Pointers and the const Qualifier . . . . . . . . . . . . . . . . . 126
4.3 C-Style Character Strings . . . . . . . . . . . . . . . . . . . . . . . . . . 130
4.3.1 Dynamically Allocating Arrays . . . . . . . . . . . . . . . . . . 134
4.3.2 Interfacing to Older Code . . . . . . . . . . . . . . . . . . . . . 139
4.4 Multidimensioned Arrays . . . . . . . . . . . . . . . . . . . . . . . . . 141
4.4.1 Pointers and Multidimensioned Arrays . . . . . . . . . . . . . 143
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Chapter 5 Expressions 147
5.1 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
5.2 Relational and Logical Operators . . . . . . . . . . . . . . . . . . . . . 152
5.3 The Bitwise Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
5.3.1 Using bitset Objectsor Integral Values . . . . . . . . . . . . 156
5.3.2 Using the Shift Operators for IO . . . . . . . . . . . . . . . . . 158
5.4 Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
5.4.1 Assignment Is Right Associative . . . . . . . . . . . . . . . . . 160
5.4.2 Assignment Has Low Precedence . . . . . . . . . . . . . . . . 160
5.4.3 Compound Assignment Operators . . . . . . . . . . . . . . . . 161
5.5 Increment and Decrement Operators . . . . . . . . . . . . . . . . . . . 162
5.6 The Arrow Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.7 The Conditional Operator . . . . . . . . . . . . . . . . . . . . . . . . . 165
5.8 The size of Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
5.9 Comma Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
5.10 Evaluating Compound Expressions . . . . . . . . . . . . . . . . . . . . 168
5.10.1 Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
5.10.2 Associativity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
5.10.3 Order of Evaluation . . . . . . . . . . . . . . . . . . . . . . . . 172
5.11 The new and delete Expressions . . . . . . . . . . . . . . . . . . . . 174
5.12 Type Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
5.12.1 When Implicit Type Conversions Occur . . . . . . . . . . . . . 179
5.12.2 The Arithmetic Conversions . . . . . . . . . . . . . . . . . . . 180
5.12.3 Other Implicit Conversions . . . . . . . . . . . . . . . . . . . . 181
5.12.4 Explicit Conversions . . . . . . . . . . . . . . . . . . . . . . . . 183
5.12.5 When Casts Might Be Useful . . . . . . . . . . . . . . . . . . . 184
5.12.6 Named Casts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
5.12.7 Old-StyleCasts . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Chapter 6 Statements 191
6.1 Simple Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
6.2 Declaration Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
6.3 Compound Statements (Blocks) . . . . . . . . . . . . . . . . . . . . . . 193
6.4 Statement Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
6.5 The if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
6.5.1 The if Statement else Branch . . . . . . . . . . . . . . . . . . 197
6.6 The switch Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
6.6.1 Using a switch . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
6.6.2 Control Flow within a switch . . . . . . . . . . . . . . . . . . 201
6.6.3 The default Label . . . . . . . . . . . . . . . . . . . . . . . . 203
6.6.4 switch Expression and CaseLabels . . . . . . . . . . . . . . . 203
6.6.5 Variable Definitions inside a switch . . . . . . . . . . . . . . 204
6.7 The while Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
6.8 The forLoop Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 207
6.8.1 Omitting Parts of the for Header . . . . . . . . . . . . . . . . 209
6.8.2 Multiple Definitions in the for Header . . . . . . . . . . . . . 210
6.9 The do while Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 210
6.10 The break Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
6.11 The continue Statement . . . . . . . . . . . . . . . . . . . . . . . . . 214
6.12 The goto Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
6.13 try Blocks and Exception Handling . . . . . . . . . . . . . . . . . . . 215
6.13.1 A throw Expression . . . . . . . . . . . . . . . . . . . . . . . . 216
6.13.2 The try Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
6.13.3 Standard Exceptions . . . . . . . . . . . . . . . . . . . . . . . . 219
6.14 Using the Preprocessor for Debugging . . . . . . . . . . . . . . . . . . 220
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Chapter 7 Functions 225
7.1 Defining a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
7.1.1 Function Return Type . . . . . . . . . . . . . . . . . . . . . . . 227
7.1.2 Function Parameter List . . . . . . . . . . . . . . . . . . . . . . 228
7.2 Argument Passing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
7.2.1 Nonreference Parameters . . . . . . . . . . . . . . . . . . . . . 230
7.2.2 Reference Parameters . . . . . . . . . . . . . . . . . . . . . . . 232
7.2.3 vector and Other Container Parameters . . . . . . . . . . . . 237
7.2.4 Array Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . 238
7.2.5 Managing Arrays Passed to Functions . . . . . . . . . . . . . . 241
7.2.6 main:Handling Command-Line Options . . . . . . . . . . . . 243
7.2.7 Function swith Varying Parameters . . . . . . . . . . . . . . . 244
7.3 The return Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
7.3.1 Function swith NoReturn Value . . . . . . . . . . . . . . . . . 245
7.3.2 Functions that Returna Value . . . . . . . . . . . . . . . . . . . 246
7.3.3 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
7.4 Function Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
7.4.1 Default Arguments . . . . . . . . . . . . . . . . . . . . . . . . . 253
7.5 Local Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
7.5.1 Automatic Objects . . . . . . . . . . . . . . . . . . . . . . . . . 255
7.5.2 Static Local Objects . . . . . . . . . . . . . . . . . . . . . . . . . 255
7.6 Inline Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
7.7 Class Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . 258
7.7.1 Defining the Body of a Member Function . . . . . . . . . . . . 259
7.7.2 Defining a Member Function Outside the Class . . . . . . . . 261
7.7.3 Writing the Sales_item Constructor . . . . . . . . . . . . . . 262
7.7.4 Organizing Class Code Files . . . . . . . . . . . . . . . . . . . 264
7.8 Overloaded Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
7.8.1 Overloading and Scope . . . . . . . . . . . . . . . . . . . . . . 268
7.8.2 Function Matching and Argument Conversions . . . . . . . . 269
7.8.3 The Three Steps in Overload Resolution . . . . . . . . . . . . . 270
7.8.4 Argument-Type Conversions . . . . . . . . . . . . . . . . . . . 272
7.9 Pointers to Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Chapter 8 The IO Library 283
8.1 AnObject-Oriented Library . . . . . . . . . . . . . . . . . . . . . . . . 284
8.2 Condition States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
8.3 Managing the Output Buffer . . . . . . . . . . . . . . . . . . . . . . . . 290
8.4 File Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
8.4.1 Using File Stream Objects . . . . . . . . . . . . . . . . . . . . . 293
8.4.2 File Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
8.4.3 A Program to Open and Check Input Files . . . . . . . . . . . 299
8.5 String Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Part II Containers and Algorithms 303
Chapter 9 Sequential Containers 305
9.1 Defininga Sequential Container . . . . . . . . . . . . . . . . . . . . . . 307
9.1.1 Initializing Container Elements . . . . . . . . . . . . . . . . . . 307
9.1.2 Constraints on Types that a Container Can Hold . . . . . . . . 309
9.2 Iterators and Iterator Ranges . . . . . . . . . . . . . . . . . . . . . . . . 311
9.2.1 Iterator Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
9.2.2 Some Container Operations Invalidate Iterators . . . . . . . . 315
9.3 Sequence Container Operations . . . . . . . . . . . . . . . . . . . . . . 316
9.3.1 Container Typedefs . . . . . . . . . . . . . . . . . . . . . . . . . 316
9.3.2 begin and end Members . . . . . . . . . . . . . . . . . . . . . 317
9.3.3 Adding Elements to a Sequential Container . . . . . . . . . . . 318
9.3.4 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . 321
9.3.5 Container Size Operations . . . . . . . . . . . . . . . . . . . . . 323
9.3.6 Accessing Elements . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.3.7 Erasing Elements . . . . . . . . . . . . . . . . . . . . . . . . . . 326
9.3.8 Assignment and swap . . . . . . . . . . . . . . . . . . . . . . . 328
9.4 How a vector Grows . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
9.4.1 capacity and reserve Members . . . . . . . . . . . . . . . 331
9.5 Deciding Which Container to Use . . . . . . . . . . . . . . . . . . . . . 333
9.6 strings Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
9.6.1 Other Ways to Construct strings . . . . . . . . . . . . . . . . 338
9.6.2 Other Ways to Change a string . . . . . . . . . . . . . . . . . 339
9.6.3 string-Only Operations . . . . . . . . . . . . . . . . . . . . . 341
9.6.4 string Search Operations . . . . . . . . . . . . . . . . . . . . 343
9.6.5 Comparing strings . . . . . . . . . . . . . . . . . . . . . . . . 346
9.7 Container Adaptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
9.7.1 Stack Adaptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
9.7.2 Queue and Priority Queue . . . . . . . . . . . . . . . . . . . . . 351
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Chapter 10 Associative Containers 355
10.1 Preliminaries: the pair Type . . . . . . . . . . . . . . . . . . . . . . . 356
10.2 Associative Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
10.3 The map Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
10.3.1 Defining a map . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
10.3.2 Types Defined by map . . . . . . . . . . . . . . . . . . . . . . . 361
10.3.3 Adding Elements to a map . . . . . . . . . . . . . . . . . . . . . 362
10.3.4 Subscripting a map . . . . . . . . . . . . . . . . . . . . . . . . . 362
10.3.5 Using map::insert . . . . . . . . . . . . . . . . . . . . . . . . 364
10.3.6 Finding and Retrieving a map Element . . . . . . . . . . . . . . 367
10.3.7 Erasing Elements from a map . . . . . . . . . . . . . . . . . . . 368
10.3.8 Iterating across a map . . . . . . . . . . . . . . . . . . . . . . . 369
10.3.9 A Word Transformation Map . . . . . . . . . . . . . . . . . . . 369
10.4 The set Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
10.4.1 Defining and Using sets . . . . . . . . . . . . . . . . . . . . . 373
10.4.2 Building a Word-Exclusion Set . . . . . . . . . . . . . . . . . . 374
10.5 The multimap and multisetTypes . . . . . . . . . . . . . . . . . . 375
10.5.1 Addingand Removing Elements . . . . . . . . . . . . . . . . . 376
10.5.2 Finding Elements in a multimap or multiset . . . . . . . . 376
10.6 Using Containers: Text-Query Program . . . . . . . . . . . . . . . . . 379
10.6.1 Designof the Query Program . . . . . . . . . . . . . . . . . . . 380
10.6.2 Text Query Class . . . . . . . . . . . . . . . . . . . . . . . . . . 382
10.6.3 Using the Text Query Class . . . . . . . . . . . . . . . . . . . 383
10.6.4 Writing the Member Functions . . . . . . . . . . . . . . . . . . 385
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Chapter 11 Generic Algorithms 391
11.1 Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
11.2 A First Lookat the Algorithms . . . . . . . . . . . . . . . . . . . . . . 395
11.2.1 Read-Only Algorithms . . . . . . . . . . . . . . . . . . . . . . . 396
11.2.2 Algorithms that Write Container Elements . . . . . . . . . . . 398
11.2.3 Algorithms that Reorder Container Elements . . . . . . . . . . 400
11.3 Revisiting Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
11.3.1 Insert Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
11.3.2 iostream Iterators . . . . . . . . . . . . . . . . . . . . . . . . 407
11.3.3 Reverse Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . 412
11.3.4 const Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
11.3.5 TheFive Iterator Categories . . . . . . . . . . . . . . . . . . . . 416
11.4 Structure of Generic Algorithms . . . . . . . . . . . . . . . . . . . . . 419
11.4.1 Algorithm Parameter Patterns . . . . . . . . . . . . . . . . . . 419
11.4.2 Algorithm Naming Conventions . . . . . . . . . . . . . . . . . 420
11.5 Container-Specific Algorithms . . . . . . . . . . . . . . . . . . . . . . . 421
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Part III Classes and Data Abstraction 427
Chapter 12 Classes 429
12.1 Class Definitions and Declarations . . . . . . . . . . . . . . . . . . . . 430
12.1.1 Class Definitions: A Recap . . . . . . . . . . . . . . . . . . . . 430
12.1.2 Data Abstraction and Encapsulation . . . . . . . . . . . . . . . 432
12.1.3 More on Class Definitions . . . . . . . . . . . . . . . . . . . . . 434
12.1.4 Class Declaration sversus Definitions . . . . . . . . . . . . . . 437
12.1.5 Class Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
12.2 The Implicit this Pointer . . . . . . . . . . . . . . . . . . . . . . . . . 440
12.3 Class Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
12.3.1 Name Look up in Class Scope . . . . . . . . . . . . . . . . . . . 447
12.4 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
12.4.1 The Constructor Initializer . . . . . . . . . . . . . . . . . . . . . 453
12.4.2 Default Arguments and Constructors . . . . . . . . . . . . . . 458
12.4.3 The Default Constructor . . . . . . . . . . . . . . . . . . . . . . 458
12.4.4 ImplicitClass-Type Conversions . . . . . . . . . . . . . . . . . 461
12.4.5 Explicit Initialization of Class Members . . . . . . . . . . . . . 464
12.5 Friends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
12.6 static Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . 467
12.6.1 static Member Functions . . . . . . . . . . . . . . . . . . . . 469
12.6.2 static Data Members . . . . . . . . . . . . . . . . . . . . . . 469
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Chapter 13 Copy Control 475
13.1 The Copy Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
13.1.1 The Synthesized CopyConstructor . . . . . . . . . . . . . . . . 479
13.1.2 Defining Our Own Copy Constructor . . . . . . . . . . . . . . 480
13.1.3 Preventing Copies . . . . . . . . . . . . . . . . . . . . . . . . . 481
13.2 The Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . 482
13.3 The Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
13.4 A Message-Handling Example . . . . . . . . . . . . . . . . . . . . . . 486
13.5 Managing Pointer Members . . . . . . . . . . . . . . . . . . . . . . . . 492
13.5.1 Defining Smart Pointer Classes . . . . . . . . . . . . . . . . . . 495
13.5.2 Defining Valuelike Classes . . . . . . . . . . . . . . . . . . . . . 499
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Chapter 14 Overloaded Operations and Conversions 505
14.1 Defining an Overloaded Operator . . . . . . . . . . . . . . . . . . . . 506
14.1.1 Overloaded Operator Design . . . . . . . . . . . . . . . . . . . 510
14.2 Input and Output Operators . . . . . . . . . . . . . . . . . . . . . . . . 513
14.2.1 Overloading the Output Operator << . . . . . . . . . . . . . . 513
14.2.2 Overloading the Input Operator >> . . . . . . . . . . . . . . . 515
14.3 Arithmetic and Relational Operators . . . . . . . . . . . . . . . . . . . 517
14.3.1 Equality Operators . . . . . . . . . . . . . . . . . . . . . . . . . 518
14.3.2 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . 520
14.4 Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
14.5 Subscript Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
14.6 Member Access Operators . . . . . . . . . . . . . . . . . . . . . . . . . 523
14.7 Increment and Decrement Operators . . . . . . . . . . . . . . . . . . . 526
14.8 Call Operator and Function Objects . . . . . . . . . . . . . . . . . . . . 530
14.8.1 Using Function Object swith Library Algorithms . . . . . . . . 531
14.8.2 Library-Defined Function Objects . . . . . . . . . . . . . . . . 533
14.8.3 Function Adaptors for Function Objects . . . . . . . . . . . . . 535
14.9 Conversions and Class Types . . . . . . . . . . . . . . . . . . . . . . . 535
14.9.1 Why Conversions Are Useful . . . . . . . . . . . . . . . . . . . 536
14.9.2 Conversion Operators . . . . . . . . . . . . . . . . . . . . . . . 537
14.9.3 Argument Matching and Conversions . . . . . . . . . . . . . . 541
14.9.4 Overload Resolution and Class Arguments . . . . . . . . . . . 544
14.9.5 Overloading,Conversions, andOperators . . . . . . . . . . . 547
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
Part IV Object-Oriented and Generic Programming 555
Chapter 15 Object-Oriented Programming 557
15.1 OOP:AnOverview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
15.2 Defining Base and Derived Classes . . . . . . . . . . . . . . . . . . . . 560
15.2.1 Defining a Base Class . . . . . . . . . . . . . . . . . . . . . . . . 560
15.2.2 protected Members . . . . . . . . . . . . . . . . . . . . . . . 562
15.2.3 Derived Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
15.2.4 virtual and Other Member Functions . . . . . . . . . . . . . 566
15.2.5 Public,Private,and Protected Inheritance . . . . . . . . . . . . 570
15.2.6 Friendship and Inheritance . . . . . . . . . . . . . . . . . . . . 575
15.2.7 Inheritance and Static Members . . . . . . . . . . . . . . . . . 576
15.3 Conversions and Inheritance . . . . . . . . . . . . . . . . . . . . . . . 577
15.3.1 Derived-to-Base Conversions . . . . . . . . . . . . . . . . . . . 577
15.3.2 Conversions from Base to Derived . . . . . . . . . . . . . . . . 580
15.4 Constructors and Copy Control . . . . . . . . . . . . . . . . . . . . . . 580
15.4.1 Base-Class Constructors and Copy Control . . . . . . . . . . . 580
15.4.2 Derived-Class Constructors . . . . . . . . . . . . . . . . . . . . 581
15.4.3 Copy Control and Inheritance . . . . . . . . . . . . . . . . . . . 584
15.4.4 Virtual Destructors . . . . . . . . . . . . . . . . . . . . . . . . . 587
15.4.5 Virtuals in Constructors and Destructors . . . . . . . . . . . . 589
15.5 Class Scopeunder Inheritance . . . . . . . . . . . . . . . . . . . . . . . 590
15.5.1 Name Lookup Happensat Compile Time . . . . . . . . . . . . 590
15.5.2 Name Collisions and Inheritance . . . . . . . . . . . . . . . . . 591
15.5.3 Scopeand Member Functions . . . . . . . . . . . . . . . . . . . 592
15.5.4 Virtual Functions and Scope . . . . . . . . . . . . . . . . . . . . 594
15.6 Pure Virtual Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 595
15.7 Containers and Inheritance . . . . . . . . . . . . . . . . . . . . . . . . 597
15.8 Handle Classes and Inheritance . . . . . . . . . . . . . . . . . . . . . . 598
15.8.1 A Pointerlike Handle . . . . . . . . . . . . . . . . . . . . . . . . 599
15.8.2 Cloning an Unknown Type . . . . . . . . . . . . . . . . . . . . 602
15.8.3 Using the Handle . . . . . . . . . . . . . . . . . . . . . . . . . . 603
15.9 Text Queries Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . 607
15.9.1 An Object-Oriented Solution . . . . . . . . . . . . . . . . . . . 609
15.9.2 A Valuelike Handle . . . . . . . . . . . . . . . . . . . . . . . . . 610
15.9.3 The Query_baseClass . . . . . . . . . . . . . . . . . . . . . . 612
15.9.4 The Query Handle Class . . . . . . . . . . . . . . . . . . . . . 613
15.9.5 The Derived Classes . . . . . . . . . . . . . . . . . . . . . . . . 616
15.9.6 The eval Functions . . . . . . . . . . . . . . . . . . . . . . . . 618
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Chapter 16 Templates and Generic Programming 623
16.1 Template Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
16.1.1 Defining a Function Template . . . . . . . . . . . . . . . . . . . 625
16.1.2 Defining a Class Template . . . . . . . . . . . . . . . . . . . . . 627
16.1.3 Template Parameters . . . . . . . . . . . . . . . . . . . . . . . . 628
16.1.4 Template Type Parameters . . . . . . . . . . . . . . . . . . . . . 630
16.1.5 Non type Template Parameters . . . . . . . . . . . . . . . . . . 632
16.1.6 Writing Generic Programs . . . . . . . . . . . . . . . . . . . . . 633
16.2 Instantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
16.2.1 Template Argument Deduction . . . . . . . . . . . . . . . . . . 637
16.2.2 Function-Template Explicit Arguments . . . . . . . . . . . . . 642
16.3 Template Compilation Models . . . . . . . . . . . . . . . . . . . . . . . 643
16.4 Class Template Members . . . . . . . . . . . . . . . . . . . . . . . . . . 647
16.4.1 Class-Template Member Functions . . . . . . . . . . . . . . . . 651
16.4.2 Template Arguments for Nontype Parameters . . . . . . . . . 655
16.4.3 Friend Declarations in Class Templates . . . . . . . . . . . . . 655
16.4.4 Queue and Queue Item Friend Declarations . . . . . . . . . . 658
16.4.5 Member Templates . . . . . . . . . . . . . . . . . . . . . . . . . 660
16.4.6 The Complete Queue Class . . . . . . . . . . . . . . . . . . . . 664
16.4.7 static Members of Class Templates . . . . . . . . . . . . . . 665
16.5 AGeneric HandleClass . . . . . . . . . . . . . . . . . . . . . . . . . . 666
16.5.1 Defining the Handle Class . . . . . . . . . . . . . . . . . . . . . 667
16.5.2 Using the Handle . . . . . . . . . . . . . . . . . . . . . . . . . . 668
16.6 Template Specializations . . . . . . . . . . . . . . . . . . . . . . . . . . 671
16.6.1 Specializing a Function Template . . . . . . . . . . . . . . . . . 672
16.6.2 Specializing a Class Template . . . . . . . . . . . . . . . . . . . 675
16.6.3 Specializing Members but Not the Class . . . . . . . . . . . . . 677
16.6.4 Class-Template Partial Specializations . . . . . . . . . . . . . . 678
16.7 Overloading and Function Templates . . . . . . . . . . . . . . . . . . 679
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Part V Advanced Topics 685
Chapter 17 Tools for Large Programs 687
17.1 Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
17.1.1 Throwing an Exception of Class Type . . . . . . . . . . . . . . 689
17.1.2 Stack Unwinding . . . . . . . . . . . . . . . . . . . . . . . . . . 691
17.1.3 Catching an Exception . . . . . . . . . . . . . . . . . . . . . . . 693
17.1.4 Rethrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
17.1.5 The Catch-All Handler . . . . . . . . . . . . . . . . . . . . . . . 696
17.1.6 Function Try Blocks and Constructors . . . . . . . . . . . . . . 696
17.1.7 Exception Class Hierarchies . . . . . . . . . . . . . . . . . . . . 697
17.1.8 Automatic Resource Deallocation . . . . . . . . . . . . . . . . 700
17.1.9 The auto_ptrClass . . . . . . . . . . . . . . . . . . . . . . . . 702
17.1.10Exception Specifications . . . . . . . . . . . . . . . . . . . . . . 706
17.1.11Function Pointer Exception Specifications . . . . . . . . . . . . 711
17.2 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
17.2.1 Namespace Definitions . . . . . . . . . . . . . . . . . . . . . . 712
17.2.2 Nested Namespaces . . . . . . . . . . . . . . . . . . . . . . . . 717
17.2.3 Unnamed Namespaces . . . . . . . . . . . . . . . . . . . . . . . 718
17.2.4 Using Namespace Members . . . . . . . . . . . . . . . . . . . . 720
17.2.5 Classes,Namespaces,and Scope . . . . . . . . . . . . . . . . . 724
17.2.6 Overloading and Namespaces . . . . . . . . . . . . . . . . . . 727
17.2.7 Namespaces and Templates . . . . . . . . . . . . . . . . . . . . 730
17.3 Multiple and Virtual Inheritance . . . . . . . . . . . . . . . . . . . . . 731
17.3.1 Multiple Inheritance . . . . . . . . . . . . . . . . . . . . . . . . 731
17.3.2 Conversions and Multiple Base Classes . . . . . . . . . . . . . 734
17.3.3 CopyControl for Multiply Derived Classes . . . . . . . . . . . 737
17.3.4 Class Scopeunder Multiple Inheritance . . . . . . . . . . . . . 737
17.3.5 Virtual Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . 740
17.3.6 Virtual Base Class Declaration . . . . . . . . . . . . . . . . . . 742
17.3.7 Special Initialization Semantics . . . . . . . . . . . . . . . . . . 744
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
Chapter 18 Specialized Tools and Techniques 753
18.1 Optimizing Memory Allocation . . . . . . . . . . . . . . . . . . . . . . 754
18.1.1 Memory Allocation in C++ . . . . . . . . . . . . . . . . . . . . 754
18.1.2 The allocatorClass . . . . . . . . . . . . . . . . . . . . . . . 755
18.1.3 operator new and operator delete Functions . . . . . . 759
18.1.4 Placement new Expressions . . . . . . . . . . . . . . . . . . . . 761
18.1.5 Explicit Destructor Invocation . . . . . . . . . . . . . . . . . . 762
18.1.6 Class Specific new and delete . . . . . . . . . . . . . . . . . . 763
18.1.7 A Memory-Allocator Base Class . . . . . . . . . . . . . . . . . 766
18.2 Run-Time Type Identification . . . . . . . . . . . . . . . . . . . . . . . 772
18.2.1 The dynamic_cast Operator . . . . . . . . . . . . . . . . . . 773
18.2.2 The typeid Operator . . . . . . . . . . . . . . . . . . . . . . . 775
18.2.3 Using RTTI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
18.2.4 The type_info Class . . . . . . . . . . . . . . . . . . . . . . . 779
18.3 Pointer to Class Member . . . . . . . . . . . . . . . . . . . . . . . . . . 780
18.3.1 Declaring a Pointer to Member . . . . . . . . . . . . . . . . . . 781
18.3.2 Using a Pointer to Class Member . . . . . . . . . . . . . . . . . 783
18.4 Nested Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786
18.4.1 A Nested-Class Implementation . . . . . . . . . . . . . . . . . 787
18.4.2 Name Lookup in Nested Class Scope . . . . . . . . . . . . . . 791
18.5 Union: ASpace-Saving Class . . . . . . . . . . . . . . . . . . . . . . . 792
18.6 Local Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
18.7 Inherently Nonportable Features . . . . . . . . . . . . . . . . . . . . . 797
18.7.1 Bit-fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798
18.7.2 volatile Qualifier . . . . . . . . . . . . . . . . . . . . . . . . 799
18.7.3 Linkage Directives: extern "C" . . . . . . . . . . . . . . . . . 801
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
Defined Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805
Appendix A The Library 809
A.1 LibraryNames and Headers . . . . . . . . . . . . . . . . . . . . . . . . 810
A.2 A Brief Tour of the Algorithms . . . . . . . . . . . . . . . . . . . . . . 811
A.2.1 Algorithms to Findan Object . . . . . . . . . . . . . . . . . . . 811
A.2.2 OtherRead-Only Algorithms . . . . . . . . . . . . . . . . . . . 813
A.2.3 Binary-Search Algorithms . . . . . . . . . . . . . . . . . . . . . 814
A.2.4 Algorithms that Write Container Elements . . . . . . . . . . . 815
A.2.5 Partitioning and Sorting Algorithms . . . . . . . . . . . . . . . 817
A.2.6 General Reordering Operations . . . . . . . . . . . . . . . . . . 818
A.2.7 Permutation Algorithms . . . . . . . . . . . . . . . . . . . . . . 820
A.2.8 Set Algorithms for Sorted Sequences . . . . . . . . . . . . . . . 821
A.2.9 Minimum and Maximum Values . . . . . . . . . . . . . . . . . 822
A.2.10 Numeric Algorithms . . . . . . . . . . . . . . . . . . . . . . . . 823
A.3 The IO Library Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . 825
A.3.1 Format State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
A.3.2 Many Manipulators Change the Format State. . . . . . . . . . 825
A.3.3 Controlling Output Formats . . . . . . . . . . . . . . . . . . . . 826
A.3.4 Controlling Input Formatting . . . . . . . . . . . . . . . . . . . 833
A.3.5 Unformatted Input/Output Operations . . . . . . . . . . . . . 834
A.3.6 Single-Byte Operations . . . . . . . . . . . . . . . . . . . . . . . 834
A.3.7 Multi-Byte Operations . . . . . . . . . . . . . . . . . . . . . . . 835
A.3.8 Random Access to a Stream . . . . . . . . . . . . . . . . . . . . 837
A.3.9 Reading and Writing to the Same File . . . . . . . . . . . . . . 840
Index 843

相关文章

  • 滕瑞 15推荐

    对我影响最大的图灵书

    假如只有一本书,对于这个问题就不会有太多选择。但是,先来一张家里图灵教育书的全家福。 ![enter image description here][1] 共计74本,总重46.5kg,高度138cm。 由于参赛选手太多,和奥斯卡颁奖一样,先来个提名吧: 1.《逆向工程…...

暂无评论!