# Modern C++ Programming # ## C++11/C++14/C++17 ## Open access C++ course, University of Verona (UNIVR), Italy [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.