TABLE OF CONTENTS....2
TITLE PAGE....20
INTRODUCTION....21
WHO THIS BOOK IS FOR....23
WHAT THIS BOOK COVERS....24
HOW THIS BOOK IS STRUCTURED....26
CONVENTIONS....28
WHAT YOU NEED TO USE THIS BOOK....29
READER SUPPORT FOR THIS BOOK....34
NOTE....35
PART I: Introduction to Professional C++....36
1 A Crash Course in C++ and the Standard Library....37
C++ CRASH COURSE....37
YOUR FIRST BIGGER C++ PROGRAM....94
SUMMARY....102
EXERCISES....102
NOTE....103
2 Working with Strings and String Views....104
DYNAMIC STRINGS....105
FORMATTING AND PRINTING STRINGS....129
SUMMARY....150
EXERCISES....150
NOTES....152
3 Coding with Style....153
THE IMPORTANCE OF LOOKING GOOD....153
DOCUMENTING YOUR CODE....154
DECOMPOSITION....169
NAMING....173
USING LANGUAGE FEATURES WITH STYLE....178
FORMATTING....181
STYLISTIC CHALLENGES....185
SUMMARY....186
EXERCISES....187
NOTE....189
PART II: Professional C++ Software Design....190
4 Designing Professional C++ Programs....191
WHAT IS PROGRAMMING DESIGN?....191
THE IMPORTANCE OF PROGRAMMING DESIGN....192
DESIGNING FOR C++....195
TWO RULES FOR YOUR OWN C++ DESIGNS....196
REUSING EXISTING CODE....199
DESIGNING A CHESS PROGRAM....209
SUMMARY....216
EXERCISES....217
5 Designing with Classes....218
AM I THINKING PROCEDURALLY?....219
THE OBJECT-ORIENTED PHILOSOPHY....220
LIVING IN A WORLD OF CLASSES....225
CLASS RELATIONSHIPS....228
SUMMARY....247
EXERCISES....247
6 Designing for Reuse....250
THE REUSE PHILOSOPHY....251
HOW TO DESIGN REUSABLE CODE....252
SUMMARY....284
EXERCISES....285
NOTE....286
PART III: C++ Coding the Professional Way....287
7 Memory Management....289
WORKING WITH DYNAMIC MEMORY....290
ARRAY-POINTER DUALITY....312
LOW-LEVEL MEMORY OPERATIONS....316
COMMON MEMORY PITFALLS....320
SMART POINTERS....328
SUMMARY....347
EXERCISES....348
NOTES....349
8 Gaining Proficiency with Classes and Objects....350
INTRODUCING THE SPREADSHEET EXAMPLE....351
WRITING CLASSES....352
UNDERSTANDING OBJECT LIFE CYCLES....365
SUMMARY....401
EXERCISES....402
9 Mastering Classes and Objects....404
FRIENDS....405
DYNAMIC MEMORY ALLOCATION IN OBJECTS....407
MORE ABOUT MEMBER FUNCTIONS....442
CONSTEXPR AND CONSTEVAL....457
DIFFERENT KINDS OF DATA MEMBERS....462
NESTED CLASSES....469
ENUMERATIONS INSIDE CLASSES....471
OPERATOR OVERLOADING....472
BUILDING STABLE INTERFACES....488
SUMMARY....494
EXERCISES....495
NOTES....497
10 Discovering Inheritance Techniques....498
BUILDING CLASSES WITH INHERITANCE....499
INHERITANCE FOR REUSE....520
RESPECT YOUR PARENTS....525
INHERITANCE FOR POLYMORPHISM....536
MULTIPLE INHERITANCE....550
INTERESTING AND OBSCURE INHERITANCE ISSUES....556
CASTS....588
SUMMARY....595
EXERCISES....595
11 Modules, Header Files, and Miscellaneous Topics....597
MODULES....598
PREPROCESSOR DIRECTIVES....620
LINKAGE....625
HEADER FILES....629
FEATURE-TEST MACROS FOR CORE LANGUAGE FEATURES....633
THE STATIC KEYWORD....635
C-STYLE VARIABLE-LENGTH ARGUMENT LISTS....638
SUMMARY....641
EXERCISES....641
12 Writing Generic Code with Templates....643
OVERVIEW OF TEMPLATES....644
CLASS TEMPLATES....645
FUNCTION TEMPLATES....686
VARIABLE TEMPLATES....698
CONCEPTS....699
SUMMARY....716
EXERCISES....716
13 Demystifying C++ I/O....719
USING STREAMS....721
STRING STREAMS....746
SPAN-BASED STREAMS....749
FILE STREAMS....750
BIDIRECTIONAL I/O....758
FILESYSTEM SUPPORT LIBRARY....760
SUMMARY....764
EXERCISES....765
14 Handling Errors....767
ERRORS AND EXCEPTIONS....768
EXCEPTION MECHANICS....774
EXCEPTIONS AND POLYMORPHISM....790
RETHROWING EXCEPTIONS....801
STACK UNWINDING AND CLEANUP....803
SOURCE LOCATION....807
STACK TRACE....810
COMMON ERROR-HANDLING ISSUES....815
EXCEPTION SAFETY GUARANTEES....828
SUMMARY....829
EXERCISES....829
NOTE....831
15 Overloading C++ Operators....832
OVERVIEW OF OPERATOR OVERLOADING....833
OVERLOADING THE ARITHMETIC OPERATORS....844
OVERLOADING THE BITWISE AND BINARY LOGICAL OPERATORS....846
OVERLOADING THE INSERTION AND EXTRACTION OPERATORS....846
OVERLOADING THE SUBSCRIPTING OPERATOR....847
OVERLOADING THE FUNCTION CALL OPERATOR....854
OVERLOADING THE DEREFERENCING OPERATORS....856
WRITING CONVERSION OPERATORS....859
OVERLOADING THE MEMORY ALLOCATION AND DEALLOCATION OPERATORS....863
OVERLOADING USER-DEFINED LITERAL OPERATORS....869
SUMMARY....871
EXERCISES....872
16 Overview of the C++ Standard Library....873
CODING PRINCIPLES....874
OVERVIEW OF THE C++ STANDARD LIBRARY....874
SUMMARY....896
EXERCISES....896
17 Understanding Iterators and the Ranges Library....897
ITERATORS....898
STREAM ITERATORS....910
ITERATOR ADAPTERS....914
RANGES....921
SUMMARY....941
EXERCISES....942
NOTE....943
18 Standard Library Containers....944
CONTAINERS OVERVIEW....945
SEQUENTIAL CONTAINERS....950
SEQUENTIAL VIEWS....996
CONTAINER ADAPTERS....1002
ASSOCIATIVE CONTAINERS....1011
OTHER CONTAINERS....1047
SUMMARY....1057
EXERCISES....1058
19 Function Pointers, Function Objects, and Lambda Expressions....1060
FUNCTION POINTERS....1061
POINTERS TO MEMBER FUNCTIONS (AND DATA MEMBERS)....1067
FUNCTION OBJECTS....1069
POLYMORPHIC FUNCTION WRAPPERS....1082
LAMBDA EXPRESSIONS....1085
INVOKERS....1101
SUMMARY....1102
EXERCISES....1103
NOTE....1104
20 Mastering Standard Library Algorithms....1105
OVERVIEW OF ALGORITHMS....1106
ALGORITHM DETAILS....1113
SUMMARY....1149
EXERCISES....1150
21 String Localization and Regular Expressions....1152
LOCALIZATION....1153
REGULAR EXPRESSIONS....1168
SUMMARY....1196
EXERCISES....1197
22 Date and Time Utilities....1199
COMPILE-TIME RATIONAL NUMBERS....1199
DURATION....1202
CLOCK....1208
TIME POINT....1211
DATE....1213
TIME ZONE....1218
SUMMARY....1219
EXERCISES....1220
23 Random Number Facilities....1221
C-STYLE RANDOM NUMBER GENERATION....1222
RANDOM NUMBER ENGINES....1223
RANDOM NUMBER ENGINE ADAPTERS....1227
PREDEFINED ENGINES AND ENGINE ADAPTERS....1228
GENERATING RANDOM NUMBERS....1228
RANDOM NUMBER DISTRIBUTIONS....1231
SUMMARY....1236
EXERCISES....1237
24 Additional Vocabulary Types....1239
VARIANT....1240
ANY....1243
TUPLE....1245
OPTIONAL: MONADIC OPERATIONS....1253
EXPECTED....1255
SUMMARY....1260
EXERCISES....1261
PART IV: Mastering Advanced Features of C++....1263
25 Customizing and Extending the Standard Library....1264
ALLOCATORS....1265
EXTENDING THE STANDARD LIBRARY....1268
SUMMARY....1317
EXERCISES....1318
NOTE....1319
26 Advanced Templates....1320
MORE ABOUT TEMPLATE PARAMETERS....1320
CLASS TEMPLATE PARTIAL SPECIALIZATION....1327
EMULATING FUNCTION PARTIAL SPECIALIZATION WITH OVERLOADING....1331
TEMPLATE RECURSION....1333
VARIADIC TEMPLATES....1336
METAPROGRAMMING....1344
SUMMARY....1362
EXERCISES....1362
27 Multithreaded Programming with C++....1364
INTRODUCTION....1365
THREADS....1374
ATOMIC OPERATIONS LIBRARY....1389
MUTUAL EXCLUSION....1398
CONDITION VARIABLES....1416
LATCHES....1420
BARRIERS....1422
SEMAPHORES....1424
FUTURES....1426
EXAMPLE: MULTITHREADED LOGGER CLASS....1433
THREAD POOLS....1441
COROUTINES....1442
THREADING DESIGN AND BEST PRACTICES....1445
SUMMARY....1447
EXERCISES....1448
NOTES....1449
PART V: C++ Software Engineering....1451
28 Maximizing Software Engineering Methods....1452
THE NEED FOR PROCESS....1453
SOFTWARE LIFE CYCLE MODELS....1455
SOFTWARE ENGINEERING METHODOLOGIES....1465
BUILDING YOUR OWN PROCESS AND METHODOLOGY....1483
VERSION CONTROL....1484
SUMMARY....1488
EXERCISES....1488
29 Writing Efficient C++....1490
OVERVIEW OF PERFORMANCE AND EFFICIENCY....1491
LANGUAGE-LEVEL EFFICIENCY....1494
DESIGN-LEVEL EFFICIENCY....1502
PROFILING....1513
SUMMARY....1529
EXERCISES....1530
NOTES....1530
30 Becoming Adept at Testing....1532
QUALITY CONTROL....1533
UNIT TESTING....1536
FUZZ TESTING....1553
HIGHER-LEVEL TESTING....1553
TIPS FOR SUCCESSFUL TESTING....1556
SUMMARY....1557
EXERCISES....1557
NOTE....1558
31 Conquering Debugging....1559
THE FUNDAMENTAL LAW OF DEBUGGING....1560
BUG TAXONOMIES....1560
AVOID BUGS....1561
PLAN FOR BUGS....1563
DEBUGGING TECHNIQUES....1582
SUMMARY....1615
EXERCISES....1615
32 Incorporating Design Techniques and Frameworks....1618
“I CAN NEVER REMEMBER HOW TO…”....1620
THERE MUST BE A BETTER WAY....1629
OBJECT-ORIENTED FRAMEWORKS....1647
SUMMARY....1651
EXERCISES....1651
33 Applying Design Patterns....1653
THE STRATEGY PATTERN....1655
THE ABSTRACT FACTORY PATTERN....1658
THE FACTORY METHOD PATTERN....1663
OTHER FACTORY PATTERNS....1670
THE ADAPTER PATTERN....1672
THE PROXY PATTERN....1675
THE ITERATOR PATTERN....1678
THE OBSERVER PATTERN....1680
THE DECORATOR PATTERN....1684
THE CHAIN OF RESPONSIBILITY PATTERN....1689
THE SINGLETON PATTERN....1693
SUMMARY....1698
EXERCISES....1699
34 Developing Cross-Platform and Cross-Language Applications....1701
CROSS-PLATFORM DEVELOPMENT....1702
CROSS-LANGUAGE DEVELOPMENT....1714
SUMMARY....1737
EXERCISES....1738
NOTE....1739
PART VI: Appendices....1741
A: C++ Interviews....1742
CHAPTER 1: A CRASH COURSE IN C++ AND THE STANDARD LIBRARY....1743
CHAPTERS 2 AND 21: WORKING WITH STRINGS AND STRING VIEWS, AND STRING LOCALIZATION AND REGULAR EXPRESSIONS....1746
CHAPTER 3: CODING WITH STYLE....1749
CHAPTER 4: DESIGNING PROFESSIONAL C++ PROGRAMS....1751
CHAPTER 5: DESIGNING WITH CLASSES....1754
CHAPTER 6: DESIGNING FOR REUSE....1756
CHAPTER 7: MEMORY MANAGEMENT....1757
CHAPTERS 8 AND 9: GAINING PROFICIENCY WITH CLASSES AND OBJECTS, AND MASTERING CLASSES AND OBJECTS....1758
CHAPTER 10: DISCOVERING INHERITANCE TECHNIQUES....1763
CHAPTER 11: MODULES, HEADER FILES, AND MISCELLANEOUS TOPICS....1765
CHAPTERS 12 AND 26: WRITING GENERIC CODE WITH TEMPLATES, AND ADVANCED TEMPLATES....1766
CHAPTER 13: DEMYSTIFYING C++ I/O....1768
CHAPTER 14: HANDLING ERRORS....1769
CHAPTER 15: OVERLOADING C++ OPERATORS....1771
CHAPTERS 16–20 AND 25: THE STANDARD LIBRARY....1772
CHAPTER 22: DATE AND TIME UTILITIES....1775
CHAPTER 23: RANDOM NUMBER FACILITIES....1776
CHAPTER 24: ADDITIONAL VOCABULARY TYPES....1777
CHAPTER 27: MULTITHREADED PROGRAMMING WITH C++....1778
CHAPTER 28: MAXIMIZING SOFTWARE ENGINEERING METHODS....1780
CHAPTER 29: WRITING EFFICIENT C++....1782
CHAPTER 30: BECOMING ADEPT AT TESTING....1784
CHAPTER 31: CONQUERING DEBUGGING....1785
CHAPTER 32: INCORPORATING DESIGN TECHNIQUES AND FRAMEWORKS....1786
CHAPTER 33: APPLYING DESIGN PATTERNS....1787
CHAPTER 34: DEVELOPING CROSS-PLATFORM AND CROSS-LANGUAGE APPLICATIONS....1788
B: Annotated Bibliography....1789
C++....1789
UNIFIED MODELING LANGUAGE....1798
ALGORITHMS AND DATA STRUCTURES....1798
RANDOM NUMBERS....1799
OPEN-SOURCE SOFTWARE....1799
SOFTWARE ENGINEERING METHODOLOGY....1800
PROGRAMMING STYLE....1802
COMPUTER ARCHITECTURE....1804
EFFICIENCY....1804
TESTING....1804
DEBUGGING....1805
DESIGN PATTERNS....1806
OPERATING SYSTEMS....1807
MULTITHREADED PROGRAMMING....1807
C: Standard Library Header Files....1808
THE C STANDARD LIBRARY....1808
CONTAINERS....1812
ALGORITHMS, ITERATORS, RANGES, AND ALLOCATORS....1813
GENERAL UTILITIES....1815
MATHEMATICAL UTILITIES....1818
EXCEPTIONS....1819
I/O STREAMS....1819
THREADING SUPPORT LIBRARY....1821
D: Introduction to UML....1823
DIAGRAM TYPES....1823
CLASS DIAGRAMS....1824
INTERACTION DIAGRAMS....1828
INDEX....1831
COPYRIGHT....1978
DEDICATION....1979
ABOUT THE AUTHOR....1980
ABOUT THE TECHNICAL EDITORS....1981
ACKNOWLEDGMENTS....1982
END USER LICENSE AGREEMENT....1983
In the newly revised sixth edition of Professional C++, veteran software engineer and developer Marc Gregoire delivers yet another volume that raises the bar for advanced programming manuals. Covering almost all features of the new C++ standard codenamed C++23, the book offers case studies with working code that’s been tested on Windows and Linux.
As the leading resource for dedicated and knowledgeable professionals seeking to advance their C++ skills, this book provides resources that help readers:
C++ is a complex language. Professional C++, 6th Edition, allows dedicated practitioners to remain current and abreast of the latest developments and advances.