01.Introduction.pdf | ||
02.Basic_Concepts_I.pdf | ||
03.Basic_Concepts_II.pdf | ||
04.Basic_Concepts_III.pdf | ||
05.Basic_Concepts_IV.pdf | ||
06.Utilities.pdf | ||
07.Object_Oriented_I.pdf | ||
08.Object_Oriented_II.pdf | ||
09.Templates_I.pdf | ||
10.Templates_II.pdf | ||
11.Iterators_Containers_Alg.pdf | ||
12.Translation_Units.pdf | ||
13.Code_Convention.pdf | ||
14.Ecosystem.pdf | ||
15.Advanced_Topics.pdf | ||
16.Optimization_I.pdf | ||
17.Optimization_II.pdf | ||
LICENSE | ||
README.md |
Modern C++ Programming
C++11/C++14/C++17
Open access C++ course, University of Verona (UNIVR), Italy
Essential Tool
Online compiler and execution: CompilerExplorer
- for code execution: [Add new..] -> [execution only]
TOPICS
1. Introduction
- A Little History of C/C++ Programming Languages
- C++ Philosophy
- Why C++?
- Course Overview and References
- Who I Am
2. Basic Concepts I
- Prerequirements: Compiler, editor, etc.
- Hello World
- C++ Primitive Types
- Integral Data Types
- Floating-point Arithmetic
- Floating-point Issues
3. Basic Concepts II
- Enumerators
union
and Bitfieldusing
,decltype
, andauto
- Math Operators
- Statements and Control Flow
4. Basic Concepts III
- Memory Management: Heap and Stack
- Initialization
- Pointers and References
sizeof
Operatorconst
andconstexpr
- Explicit Type Conversion
5. Basic Concepts IV
- Declaration and Definition
- Functions
- Preprocessing
6. Utilities
- I/O Stream
- Filesystem Library
- Math Functions
- Algorithm Library
std::string
andstd::string_view
- Random Numbers
- Time Measuring
7. C++ Object Oriented Programming I
- C++ Classes
- Class Constructor
- Copy Construcor
- Class Destructor
- Initialization and Defaulted Members
- Class Keywords
8. C++ Object Oriented Programming II
- Polymorphism
- Operator overloading ** Special Objects
9. C++ Templates and Meta-programming I
- Function Templates
- Compile-Time Utilities
- Type Traits
- Template Parameters
10. C++ Templates and Meta-programming II
- Class Templates
- Template Meta-Programming
- SFINAE: Substitution Failure Is Not An Error
- Variadic Template
- STD Template Utility
11. Containers, Iterators, and Algorithms
- Containers and Iterators
- Sequence Containers:
array
,vector
,list
,deque
,forward_list
- Associative Containers:
set
,map
- Container Adaptors:
stack
,queue
,priority_queue
- Implement a Custom Iterator
- Iterator Utility Methods
- Algorithms Library
- Lambda Expressions
12. Translation Units
- Basic Concepts
- Linkage
- Variables Storage
- Function Template
- Class Template
- Undefined Behavior and Summary
#include
Issues- Namespace
- How to Compile: static and dynamic libraries
13. Code Conventions
- C++ Project Organization
- Coding Styles and Conventions
#include
andnamespace
- Variables and Prepossessing
- Functions and Classes
- Modern C++ Features
- Control Flow
- Naming and Formatting
14. Ecosystem
- Execution Debugging:
gdb
andassert
- Memory Debugging:
valgrind
- Sanitizers:
address
,leak
,memory
,undefined behavior
- Debugging Summary
- CMake
- Code Checking and Analysis:
warnings
andstatic analyzers
- Code Quality:
linters
- Code Testing:
unit test
,coverage
- Code Commenting:
doxygen
- Code Statistics:
lines count
,cyclomatic complexity
- Other Tools: code
formating
,exploring
,benchmarking
15. Advanced Topics
- Move Semantic
- Copy Elision and RVO
- Type deduction
- C++ Idioms:
rule of zero/three/five
,singleton
,PILP
,CRTP
- Smart Pointers
- Concurrency:
std::thread
16. Optimization I
- General Concepts: asymptotic complexity, optimization cycle, Ahmdal Law, etc.
- I/O Operations
- Locality and Memory Access Patterns
- Arithmetic
- Control Flow
- Functions
- C++ Objects
17. Optimization II
- Compiler Optimizations
- Libraries and Data Structures
- Profiling
- Parallel Computing
Reporting bugs and contributing
If you find any typos please report them by using the repository (issues panel).
Author
Federico Busato
, Dept. of Computer Science, University of Verona (Italy) federico.busato@univr.it, now Nvidia Corporation (fbusato@nvidia.com)
License
BSD 3-Clause License
Copyright (c) 2020, Modern C++ Programming All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.