Author(s): Jeganathan Swaminathan
Year: 2017
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
C++17 Features
C++17 background
What's new in C++17?
What features are deprecated or removed in C++17?
Key features in C++17
Easier nested namespace syntax
New rules for type auto-detection from braced initializer list
Simplified static_assert
The std::invoke( ) method
Structured binding
If and Switch local scoped variables
Template type auto-deduction for class templates
Inline variables
Summary
Standard Template Library
The Standard Template Library architecture
Algorithms
Iterators
Containers
Functors
Sequence containers
Array
Code walkthrough
Commonly used APIs in an array
Vector
Code walkthrough
Commonly used vector APIs
Code walkthrough
Pitfalls of a vector
List
Commonly used APIs in a list
Forward list
Code walkthrough
Commonly used APIs in a forward_list container
Deque
Commonly used APIs in a deque
Associative containers
Set
Code walkthrough
Commonly used APIs in a set
Map
Code walkthrough
Commonly used APIs in a map
Multiset
Multimap
Unordered sets
Unordered maps
Unordered multisets
Unordered multimaps
Container adapters
Stack
Commonly used APIs in a stack
Queue
Commonly used APIs in a queue
Priority queue
Commonly used APIs in a priority queue
Summary
Template Programming
Generic programming
Function templates
Code walkthrough
Overloading function templates
Code walkthrough
Class template
Code walkthrough
Explicit class specializations
Code walkthrough
Partial template specialization
Summary
Smart Pointers
Memory management
Issues with raw pointers
Smart pointers
auto_ptr
Code walkthrough - Part 1
Code walkthrough - Part 2
unique_ptr
Code walkthrough
shared_ptr
Code walkthrough
weak_ptr
Circular dependency
Summary
Developing GUI Applications in C++
Qt
Installing Qt 5.7.0 in Ubuntu 16.04
Qt Core
Writing our first Qt console application
Qt Widgets
Writing our first Qt GUI application
Layouts
Writing a GUI application with a horizontal layout
Writing a GUI application with a vertical layout
Writing a GUI application with a box layout
Writing a GUI application with a grid layout
Signals and slots
Using stacked layout in Qt applications
Writing a simple math application combining multiple layouts
Summary
Multithreaded Programming and Inter-Process Communication
Introduction to POSIX pthreads
Creating threads with the pthreads library
How to compile and run
Does C++ support threads natively?
How to write a multithreaded application using the native C++ thread feature
How to compile and run
Using std::thread in an object-oriented fashion
How to compile and run
What did you learn?
Synchronizing threads
What would happen if threads weren't synchronized?
How to compile and run
Let's use mutex
How to compile and run
What is a deadlock?
How to compile and run
What did you learn?
Shared mutex
Conditional variable
How to compile and run
What did you learn?
Semaphore
Concurrency
How to compile and run
Asynchronous message passing using the concurrency support library
How to compile and run
Concurrency tasks
How to compile and run
Using tasks with a thread support library
How to compile and run
Binding the thread procedure and its input to packaged_task
How to compile and run
Exception handling with the concurrency library
How to compile and run
What did you learn?
Summary
Test-Driven Development
TDD
Common myths and questions around TDD
Does it take more efforts for a developer to write a unit test?
Is code coverage metrics good or bad?
Does TDD work for complex legacy projects?
Is TDD even applicable for embedded or products that involve hardware?
Unit testing frameworks for C++
Google test framework
Installing Google test framework on Ubuntu
How to build google test and mock together as one single static library without installing?
Writing our first test case using the Google test framework
Using Google test framework in Visual Studio IDE
TDD in action
Testing a piece of legacy code that has dependency
Summary
Behavior-Driven Development
Behavior-driven development
TDD versus BDD
C++ BDD frameworks
The Gherkin language
Installing cucumber-cpp in Ubuntu
Installing the cucumber-cpp framework prerequisite software
Building and executing the test cases
Feature file
Spoken languages supported by Gherkin
The recommended cucumber-cpp project folder structure
Writing our first Cucumber test case
Integrating our project in cucumber-cpp CMakeLists.txt
Executing our test case
Dry running your cucumber test cases
BDD - a test-first development approach
Let's build and run our BDD test case
It's testing time!
Summary
Debugging Techniques
Effective debugging
Debugging strategies
Debugging tools
Debugging your application using GDB
GDB commands quick reference
Debugging memory leaks with Valgrind
The Memcheck tool
Detecting memory access outside the boundary of an array
Detecting memory access to already released memory locations
Detecting uninitialized memory access
Detecting memory leaks
Fixing the memory leaks
Mismatched use of new and free or malloc and delete
Summary
Code Smells and Clean Code Practices
Code refactoring
Code smell
What is agile?
SOLID design principle
Single responsibility principle
Open closed principle
Liskov substitution principle
Interface segregation
Dependency inversion
Code smell
Comment smell
Long method
Long parameter list
Duplicate code
Conditional complexity
Large class
Dead code
Primitive obsession
Data class
Feature envy
Summary