2018-03-08 12:04:09 +01:00
|
|
|
# Modern-CPP-Programming #
|
|
|
|
|
2018-03-09 19:39:45 +01:00
|
|
|
#### Modern C++ Programming Course (UNIVR) - C++11/C++14 ####
|
|
|
|
|
2018-03-09 19:42:45 +01:00
|
|
|
[Small list of C++ online compilers](https://rawgit.com/FedericoUnivr/Modern-CPP-Programming/master/html/OnlineCompiler.html)
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
## 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
|
|
|
|
|
2018-03-08 12:12:02 +01:00
|
|
|
**6. C++ Templates and Meta-programming II**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
* 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
|
|
|
|
|
2018-03-08 16:10:08 +01:00
|
|
|
### todo ###
|
|
|
|
|
2018-03-09 18:09:42 +01:00
|
|
|
* (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
|
2018-03-08 16:10:08 +01:00
|
|
|
|
2018-03-08 12:04:09 +01:00
|
|
|
### 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 ##
|
|
|
|
|
2018-03-08 12:12:02 +01:00
|
|
|
* `Federico Busato`, Dept. of Computer Science, University of Verona (Italy)
|
|
|
|
* `Alessandro Danese`, Dept. of Computer Science, University of Verona (Italy)
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
## License ##
|
|
|
|
|
|
|
|
> BSD 3-Clause License
|
|
|
|
>
|
2018-03-09 18:15:37 +01:00
|
|
|
> Copyright (c) 2018, Modern C++ Programming
|
2018-03-08 12:04:09 +01:00
|
|
|
> 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.
|