# Modern-CPP-Programming # #### Modern C++ Programming Course (UNIVR) - C++11/C++14 #### [Short list of C++ online compilers](https://rawgit.com/FedericoUnivr/Modern-CPP-Programming/master/html/OnlineCompiler.html) ## TOPICS ## **1. Introduction** * A Little History of C and C++ Programming Languages * C++ Philosophy * Why C++ is so popular? * Why C++ is so difficult? **2. Basic Concepts I** * Before Start * Hello World * I/O Stream * C++ Primitive Types * Floating Point * Strongly Typed Enumerators * Math Operators * Statement and Control Flow **3. Basic Concepts II** * Memory Management: Heap and Stack * Storage Class Specifiers * Pointers and References * sizeof Operator * Other Keywords * Explicit Type Conversion * Declaration and Definition * Functions * Unions and Bitfields * Preprocessing **4. Utilities** * Math Functions * Algorithm Library * String * Random Numbers * Time Measuring **5. C++ Object Oriented Programming** * C++ Classes * Class keyword * Polymorphism * Operator Overloading * Special Objects **6. C++ Templates and Meta-programming I** * Function Templates * Type Deduction * Compile-Time Utilities * Type Traits * Template Parameters **6. C++ Templates and Meta-programming II** * Class Templates * Template Meta-Programming * SFINAE * Variadic Template * STD Template Utility **8. Containers, Iterators, and Algorithms** * Containers and Iterators * Sequence Containers * Associative Containers * Container Adaptors * Implement a Custom Iterator * Iterator Utility Methods * Algorithms Library * Lambda Expressions **9. Code Organization and Conventions** * Basic Concepts * Variables Storage * Dealing with Multiple Files * Namespace * C++ Project Organization * Coding Style and Conventions **10. Debugging and Tools** * Debugging * CMake * Code Checking and Analysis * Code Quality (Linter) * Code Testing * Code Commenting (Doxygen) * Code Statistics * Other Tools **11. Advanced Topics** * Move Semantic * C++ Idioms * Smart Pointers * Concurrency * C++ Guidelines ### Reporting bugs and contributing ### If you find any typos please report them by using the repository (github **issues** panel). We are also ready to engage in improving and extending the course material. (You will be included in the `Acknowledgements` Section) ## Acknowledgements ## * ## Author ## * `Federico Busato`, Dept. of Computer Science, University of Verona (Italy) * `Alessandro Danese`, Dept. of Computer Science, University of Verona (Italy) ## License ## > BSD 3-Clause License > > Copyright (c) 2018, 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.