# Modern-CPP-Programming #

Modern C++ Programming Course (UNIVR) - C++11/C++14

## 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

### todo ###

* (01) Basic Concepts I -> Catastrofic Cancellation (loss of significance)
* (09) Code Organization and Conventions -> optimize the compile time
* (11) Advanced Concepts -> volatile keyword
* (12) Code Optimization
* (B) Appendix
* C++17

### 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.
