187 lines
6.5 KiB
Markdown
187 lines
6.5 KiB
Markdown
# Modern C++ Programming Course (UNIVR) - C++11/C++14/C++17 #
|
|
|
|
Open access C++ course
|
|
|
|
[Short list of C++ online compilers](https://rawgit.com/FedericoUnivr/Modern-CPP-Programming/master/html/OnlineCompiler.html)
|
|
|
|
## TOPICS ##
|
|
|
|
[**1. Introduction**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/01.Introduction.pdf)
|
|
|
|
* A Little History of C/C++ Programming Languages
|
|
* C++ Philosophy
|
|
* Why C++?
|
|
* Course References
|
|
|
|
[**2. Basic Concepts I**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/02.Basic_Concepts_I.pdf)
|
|
|
|
* Hello World
|
|
* C++ Primitive Types
|
|
* auto and decltype
|
|
* Floating-point Arithmetic
|
|
* (Strongly Typed) Enumerators
|
|
* Union and Bitfield
|
|
* Math Operators
|
|
* Statement and Control Flow
|
|
|
|
[**3. Basic Concepts II**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)
|
|
|
|
* Memory Management: Heap and Stack
|
|
* Pointers and References
|
|
* sizeof Operator
|
|
* const / constexpr
|
|
* Explicit Type Conversion (Cast)
|
|
|
|
[**4. Basic Concepts III**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)
|
|
|
|
* Declaration and Definition
|
|
* Functions
|
|
* Preprocessing
|
|
|
|
[**5. Utilities**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/05.Utilities.pdf)
|
|
|
|
* I/O Stream
|
|
* Filesystem Library
|
|
* Math Library
|
|
* Algorithm Library
|
|
* String and String View
|
|
* Random Numbers
|
|
* Time Measuring
|
|
|
|
[**6. C++ Object Oriented Programming I**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/06.Object_Oriented_I.pdf)
|
|
|
|
* C++ Classes and Hierarchy
|
|
* Constructor
|
|
* Copy Construcor
|
|
* Destructor
|
|
* Class Keyword: this, static, const, mutable, using, friend, delete
|
|
|
|
[**7. C++ Object Oriented Programming II**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/07.Object_Oriented_II.pdf)
|
|
|
|
* Polymorphism
|
|
* Keyword: virtual, override, final
|
|
* Operator overloading: <<, (), =
|
|
* Special Object: Aggregate, Trivial class, Standard layout, POD
|
|
|
|
[**8. C++ Templates and Meta-programming I**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/08.Templates_I.pdf)
|
|
|
|
* Function Templates
|
|
* Type Deduction
|
|
* Compile-Time Utilities: static_assert, decltype, declval, using
|
|
* Type Traits
|
|
* Template Parameters
|
|
|
|
[**9. C++ Templates and Meta-programming II**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/09.Templates_II.pdf)
|
|
|
|
* Class Templates
|
|
* Template Meta-Programming
|
|
* SFINAE
|
|
* Variadic Template
|
|
* STD Template Utility
|
|
|
|
[**10. Containers, Iterators, and Algorithms**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/10.Iterators_Containers_Alg.pdf)
|
|
|
|
* 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
|
|
|
|
[**11. Translation Units**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/11.Translation_Units.pdf)
|
|
|
|
* Basic concepts, linkage, scope
|
|
* Variables Storage
|
|
* Dealing with Multiple Files and Templates
|
|
* #include Issues
|
|
* Namespace
|
|
* Libraries
|
|
|
|
[**12. Code Conventions**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/12.Code_Convention.pdf)
|
|
|
|
* Coding Style
|
|
* Naming and formatting
|
|
* Maintainability and Documentation
|
|
* C++ Guidelines
|
|
|
|
[**13. Debugging and Tools**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/13.Debugging_Tools.pdf)
|
|
|
|
* Debugging: Assertion, execution, memory, sanitizers
|
|
* CMake
|
|
* Code Checking and Analysis: warnings and static analyzers
|
|
* Code Quality (Linter)
|
|
* Code Testing
|
|
* Code Commenting (Doxygen)
|
|
* Code Statistics: lines, cyclomatic complexity
|
|
* Other Tools: formating, code explorer
|
|
|
|
[**14. Advanced Topics**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/14.Advanced_Topics.pdf)
|
|
|
|
* Move Semantic
|
|
* Type deduction
|
|
* C++ Idioms: rule of three/five, singleton, PILP, CRTP
|
|
* Smart Pointers
|
|
* Concurrency
|
|
|
|
[**15. Optimization**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/15.Optimization.pdf)
|
|
(ongoing)
|
|
|
|
* Concepts: optimization cycles, complexity, performane bounds
|
|
* I/O Operations
|
|
* Memory Locality and Memory Access Patterns
|
|
* Arithmetic
|
|
* Control Flow
|
|
* Functions
|
|
* C++ Objects
|
|
* Compiler Optimizations
|
|
* Libraries and Data Structures
|
|
* Profiling
|
|
* Parallel Computing
|
|
* Compile Time
|
|
|
|
### Reporting bugs and contributing ###
|
|
|
|
If you find any typos please report them by using the repository
|
|
(**issues** panel).
|
|
We are also ready to engage in improving and extending the course material.
|
|
|
|
## Author ##
|
|
|
|
* `Federico Busato`, Dept. of Computer Science, University of Verona (Italy) [federico.busato@univr.it](mailto:federico.busato@univr.it),
|
|
now Nvidia Corporation ([fbusato@nvidia.com](mailto:fbusato@nvidia.com))
|
|
* `Alessandro Danese`, Dept. of Computer Science, University of Verona (Italy) [alessandro.danese@univr.it](mailto:alessandro.danese@univr.it)
|
|
|
|
## License ##
|
|
|
|
> BSD 3-Clause License
|
|
>
|
|
> Copyright (c) 2019, 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.
|