Expert C++ Become a Proficient Programmer by Learning Coding Best Practices with C++17 and C++20's Latest Features
Are you an experienced C++ developer eager to take your skills to the next level? This updated edition of Expert C++ is tailored to propel you toward your goals. This book takes you on a journey of building C++ applications while exploring advanced techniques beyond object-oriented programming. Alon...
Autor principal: | |
---|---|
Otros Autores: | , , , |
Formato: | Libro electrónico |
Idioma: | Inglés |
Publicado: |
Birmingham :
Packt Publishing, Limited
2023.
|
Edición: | 2nd ed |
Materias: | |
Ver en Biblioteca Universitat Ramon Llull: | https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009764838406719 |
Tabla de Contenidos:
- Cover
- Title Page
- Copyright and Credits
- Contributors
- About the reviewers
- Table of Contents
- Preface
- Part 1: Under the Hood of C++ Programming
- Chapter 1: Building C++ Applications
- Technical requirements
- Building C++ applications
- Preprocessing
- Compiling
- Linking
- Low-level programming with C++
- Functions
- Data and memory
- Control flow
- Details of OOP
- Class relationships
- Summary
- Chapter 2: Beyond Object-Oriented Programming
- Technical requirements
- An introduction to OOP and the C++ object model
- Understanding objects
- Low-level details of objects
- High-level details of objects
- C++ object model
- State
- Identity
- Behavior
- Mimicking a class
- Working with classes
- Classes from a compiler perspective
- Initialization and destruction
- Copying objects
- Moving objects
- An lvalue reference
- Rvalue references
- Notes on operator overloading
- Encapsulation and the public interface
- Class relationships
- Aggregation and composition
- Under the hood of inheritance and polymorphism
- Inheritance
- Polymorphism
- Virtual functions under the hood
- Classical design patterns
- The composite pattern
- The decorator pattern
- Design principles
- The single responsibility principle
- The open-closed principle
- The Liskov substitution principle
- The interface segregation principle
- The dependency inversion principle
- More UML in project design
- The sequence diagram
- Summary
- Questions
- Further reading
- Chapter 3: Understanding and Designing Templates
- Technical requirements
- Motivation for using templates
- Function templates
- Syntax
- Instantiation
- Deduction
- Specialization and overloading
- Class templates
- Syntax
- Instantiation
- Specialization
- Understanding variadic templates
- Syntax
- Examples.
- Exploring template parameters and arguments
- Template parameters
- Non-type template parameter
- Type template parameter
- Template template parameter
- Template arguments
- Traits
- Type trait implementation
- Optimizing algorithms using traits
- TMP and its applications
- Summary
- Questions
- Further reading
- Chapter 4: Template Meta Programming
- Technical requirements
- Back to basics (compile-time programming with templates)
- Compile-time evaluation using constexpr
- Constant expression-specified constructors (constexpr)
- SFINAE AND enable_if<
- >
- Argument substitution failure
- Disabling templates with enable_if<
- >
- Type traits
- isFundamental
- isArithmetic
- isScalar
- isConst
- isVolatile
- isPolymorphic
- isAbstract
- is_signed
- Summary
- Questions
- Chapter 5: Memory Management and Smart Pointers
- Technical requirements
- Understanding computer memory
- Designing a memory storage device
- Understanding computer memory from a higher-level perspective
- An example of memory management
- Using smart pointers
- Leveraging the RAII idiom
- std::unique_ptr
- std::shared_ptr and std::weak_ptr
- Garbage collection
- Using allocators
- Types of allocators
- Summary
- Questions
- Part 2: Designing Robust and Efficient Applications
- Chapter 6: Digging into Data Structures and Algorithms in STL
- Technical requirements
- Sequential data structures
- STL containers
- Iterating containers
- Concepts and iterators
- Understanding concepts
- Using iterators in C++20
- Node-based data structures
- Graphs and trees
- Trees
- Graphs
- Hash tables
- Algorithms
- Search algorithms
- Sorting
- Summary
- Further reading
- Questions
- Chapter 7: Advanced Data Structures
- Technical requirements
- B-trees
- Searching
- Insertion
- Deletion.
- Implementation details of std::unordered_map
- How std::unordered_map organizes element storing and how elements are inserted into or searched in std::unordered_map
- Hash functions and strategies that are used to implement them
- Digit selection
- Folding
- Using modulo
- Collisions and how they are handled
- Heaps and their applications
- Advanced lists
- Skip lists
- XOR lists
- Summary
- Questions
- Further reading
- Chapter 8: Functional Programming
- Technical requirements
- Functional programming revealed
- Using ranges
- First-class and higher-order functions
- Why use functional programming?
- Principles of functional programming
- Pure functions
- Folding
- Delving more deeply into recursion
- Head recursion
- Tail recursion
- Metaprogramming in functional C++
- Summary
- Questions
- Further reading
- Chapter 9: Concurrency and Multithreading
- Technical requirements
- Understanding concurrency and multithreading
- Processes
- Threads
- Working with threads
- Waiting for threads
- Using std::jthread
- Passing arguments to the thread function
- Managing threads and sharing data
- Sharing data
- Protecting shared data using a mutex
- Avoiding deadlocks
- Designing concurrent code
- Introducing coroutines
- Summary
- Questions
- Further reading
- Chapter 10: Designing Concurrent Data Structures
- Technical requirements
- Thread safety
- Lock-based concurrent data structures
- A thread-safe singleton pattern
- Synchronized counters
- Concurrent stacks
- Lock-free concurrent data structures
- Using atomic types
- Operations on atomic types
- Lock-free stacks
- A lock-free queue
- A lock-free hashtable
- A lock-free set
- More operations on atomics
- Summary
- Questions
- Further reading
- Chapter 11: Designing World-Ready Applications
- Technical requirements
- Design patterns.
- Singleton
- Factory
- Adapter
- Composite
- Observer
- Command
- Applying design patterns
- The problem
- Trade-offs
- Systemwide impact
- Users
- Using domain-driven design
- An example of a real-world project
- Summary
- Questions
- Further reading
- Chapter 12: Incorporating Design Patterns in C++ Applications
- Technical requirements
- Design patterns in game development
- The singleton pattern
- The factory pattern
- The flyway pattern
- Design patterns in data-intensive applications
- The proxy pattern
- The decorator pattern
- The iterator pattern
- Design patterns in enterprise applications
- SOA
- Summary
- Questions
- Further reading
- Chapter 13: Networking and Security
- Technical requirements
- Introduction to networks, the OSI model, and network programming using sockets
- The OSI model
- Network applications under the hood
- Programming network applications using sockets
- Understanding network protocols
- Designing an echo server
- Securing applications
- Securing network applications
- Summary
- Questions
- Further reading
- Chapter 14: Debugging and Testing
- Technical requirements
- Understanding the root cause of an issue
- RCA overview
- Prevention is better than cure - good coding behavior
- The uninitialized variable problem
- Side effects in compound expressions
- Mixed signed and unsigned problems
- Order of evaluation problem
- Compile-time checking versus runtime checking
- Avoiding memory leaks
- Debugging programs
- Tools for debugging a C/C++ program
- GDB overview
- Examples of GDB
- Setting breakpoints and inspection variable values
- Practical debugging strategies
- Static and dynamic analysis
- Static analysis
- Dynamic analysis
- Testing, TDD, and BDD
- Unit testing
- TDD
- BDD
- Summary
- Further reading.
- Chapter 15: Large-Scale Application Design
- Technical requirements
- The introduction of large-scale, cross-platform project organizing
- Large-scale, cross-platform project organization in C++
- A large-scale, cross-platform project in C++
- Best practices and strategies for managing a large-scale, cross-platform project in C++
- Horizontal and vertical scaling
- Horizontal scaling
- Vertical scaling
- Scaling C++ applications
- Horizontal scaling in C++
- Vertical scaling in C++
- Designing data-intensive applications
- Data structure
- Data processing
- The main function
- Summary
- Questions
- Further reading
- Part 3: C++ in the AI World
- Chapter 16: Understanding and Using C++ in Machine Learning Tasks
- Technical requirements
- Introduction to AI
- Computer vision
- NLP
- Knowledge reasoning
- ML
- Understanding ML
- Designing an algorithm that learns
- Categories of ML
- Applications of ML
- Neural networks
- Clustering
- Regression analysis
- C++ and ML
- Summary
- Questions
- Further reading
- Chapter 17: Using C++ in Data Science
- Technical requirements
- Introduction to data science
- C++ example
- Data capturing and manipulation
- C++ example
- Data cleansing and processing
- C++ example
- Applying machine learning algorithms
- C++ example
- Data visualization
- C++ example
- Summary
- Questions
- Further reading
- Chapter 18: Designing and Implementing a Data Analysis Framework
- Technical requirements
- Using and processing statistical data types
- C++ example
- Working with tabular and rectangular data
- C++ example
- A complete ETL pipeline design strategy
- C++ example
- Summary
- Questions
- Further reading
- Index
- Other Books You May Enjoy.