diff --git a/01.Introduction.pdf b/01.Introduction.pdf index 151ae35..16f8449 100644 Binary files a/01.Introduction.pdf and b/01.Introduction.pdf differ diff --git a/02.Basic_Concepts_I.pdf b/02.Basic_Concepts_I.pdf index 14b2a37..34a5249 100644 Binary files a/02.Basic_Concepts_I.pdf and b/02.Basic_Concepts_I.pdf differ diff --git a/03.Basic_Concepts_II.pdf b/03.Basic_Concepts_II.pdf index 0796c8e..68e24be 100644 Binary files a/03.Basic_Concepts_II.pdf and b/03.Basic_Concepts_II.pdf differ diff --git a/04.Basic_Concepts_III.pdf b/04.Basic_Concepts_III.pdf new file mode 100644 index 0000000..82376b5 Binary files /dev/null and b/04.Basic_Concepts_III.pdf differ diff --git a/04.Utilities.pdf b/05.Utilities.pdf similarity index 59% rename from 04.Utilities.pdf rename to 05.Utilities.pdf index e7a3978..4d0333c 100644 Binary files a/04.Utilities.pdf and b/05.Utilities.pdf differ diff --git a/10.Code_Convention.pdf b/06.Object_Oriented_I.pdf similarity index 58% rename from 10.Code_Convention.pdf rename to 06.Object_Oriented_I.pdf index d0b1990..d70bfa1 100644 Binary files a/10.Code_Convention.pdf and b/06.Object_Oriented_I.pdf differ diff --git a/05.Object_Oriented.pdf b/07.Object_Oriented_II.pdf similarity index 61% rename from 05.Object_Oriented.pdf rename to 07.Object_Oriented_II.pdf index bf0c3ef..54b1399 100644 Binary files a/05.Object_Oriented.pdf and b/07.Object_Oriented_II.pdf differ diff --git a/06.Templates_I.pdf b/08.Templates_I.pdf similarity index 64% rename from 06.Templates_I.pdf rename to 08.Templates_I.pdf index 27e2e2f..3d73ef8 100644 Binary files a/06.Templates_I.pdf and b/08.Templates_I.pdf differ diff --git a/07.Templates_II.pdf b/09.Templates_II.pdf similarity index 66% rename from 07.Templates_II.pdf rename to 09.Templates_II.pdf index 618a806..d0428b6 100644 Binary files a/07.Templates_II.pdf and b/09.Templates_II.pdf differ diff --git a/08.Iterators_Containers_Alg.pdf b/10.Iterators_Containers_Alg.pdf similarity index 89% rename from 08.Iterators_Containers_Alg.pdf rename to 10.Iterators_Containers_Alg.pdf index e252b52..c9536db 100644 Binary files a/08.Iterators_Containers_Alg.pdf and b/10.Iterators_Containers_Alg.pdf differ diff --git a/09.Code_Organization.pdf b/11.Translation_Units.pdf similarity index 60% rename from 09.Code_Organization.pdf rename to 11.Translation_Units.pdf index 801fe26..8cd832e 100644 Binary files a/09.Code_Organization.pdf and b/11.Translation_Units.pdf differ diff --git a/12.Advanced_Topics.pdf b/12.Code_Convention.pdf similarity index 53% rename from 12.Advanced_Topics.pdf rename to 12.Code_Convention.pdf index 20497f0..91e7032 100644 Binary files a/12.Advanced_Topics.pdf and b/12.Code_Convention.pdf differ diff --git a/11.Debugging_Tools.pdf b/13.Debugging_Tools.pdf similarity index 73% rename from 11.Debugging_Tools.pdf rename to 13.Debugging_Tools.pdf index b242c38..75fc09a 100644 Binary files a/11.Debugging_Tools.pdf and b/13.Debugging_Tools.pdf differ diff --git a/14.Advanced_Topics.pdf b/14.Advanced_Topics.pdf new file mode 100644 index 0000000..7d2575b Binary files /dev/null and b/14.Advanced_Topics.pdf differ diff --git a/15.Optimization.pdf b/15.Optimization.pdf new file mode 100644 index 0000000..33353df Binary files /dev/null and b/15.Optimization.pdf differ diff --git a/A.Topics.pdf b/A.Topics.pdf deleted file mode 100644 index 3a1ff31..0000000 Binary files a/A.Topics.pdf and /dev/null differ diff --git a/README.md b/README.md index 773e9b8..35eed8a 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,77 @@ -# Modern-CPP-Programming # +# Modern C++ Programming Course (UNIVR) - C++11/C++14/C++17 # -#### Modern C++ Programming Course (UNIVR) - C++11/C++14 #### +Open access C++ course [Short list of C++ online compilers](https://rawgit.com/FedericoUnivr/Modern-CPP-Programming/master/html/OnlineCompiler.html) ## TOPICS ## -**1. Introduction** +[**1. Introduction**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/01.Introduction.pdf) -* A Little History of C and C++ Programming Languages +* A Little History of C/C++ Programming Languages * C++ Philosophy -* Why C++ is so popular? -* Why C++ is so difficult? +* Why C++? +* Course References -**2. Basic Concepts I** +[**2. Basic Concepts I**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/02.Basic_Concepts_I.pdf) -* Before Start * Hello World -* I/O Stream * C++ Primitive Types -* Floating Point -* Strongly Typed Enumerators +* auto and decltype +* Floating-point Arithmetic +* (Strongly Typed) Enumerators +* Union and Bitfield * Math Operators * Statement and Control Flow -**3. Basic Concepts II** +[**3. Basic Concepts II**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf) * Memory Management: Heap and Stack -* Storage Class Specifiers * Pointers and References * sizeof Operator -* Other Keywords -* Explicit Type Conversion +* 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 -* Unions and Bitfields * Preprocessing -**4. Utilities** +[**5. Utilities**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/05.Utilities.pdf) -* Math Functions +* I/O Stream +* Filesystem Library +* Math Library * Algorithm Library -* String +* String and String View * Random Numbers * Time Measuring -**5. C++ Object Oriented Programming** +[**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) -* C++ Classes -* Class keyword * Polymorphism -* Operator Overloading -* Special Objects +* Keyword: virtual, override, final +* Operator overloading: <<, (), = +* Special Object: Aggregate, Trivial class, Standard layout, POD -**6. C++ Templates and Meta-programming I** +[**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 +* Compile-Time Utilities: static_assert, decltype, declval, using * Type Traits * Template Parameters -**6. C++ Templates and Meta-programming II** +[**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 @@ -69,66 +79,85 @@ * Variadic Template * STD Template Utility -**8. Containers, Iterators, and Algorithms** +[**10. Containers, Iterators, and Algorithms**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/10.Iterators_Containers_Alg.pdf) * Containers and Iterators -* Sequence Containers -* Associative Containers -* Container Adaptors +* 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 -**9. Code Organization and Conventions** +[**11. Translation Units**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/11.Translation_Units.pdf) -* Basic Concepts +* Basic concepts, linkage, scope * Variables Storage -* Dealing with Multiple Files +* Dealing with Multiple Files and Templates +* #include Issues * Namespace -* C++ Project Organization -* Coding Style and Conventions +* Libraries -**10. Debugging and Tools** +[**12. Code Conventions**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/12.Code_Convention.pdf) -* Debugging +* 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 +* Code Checking and Analysis: warnings and static analyzers * Code Quality (Linter) * Code Testing * Code Commenting (Doxygen) -* Code Statistics -* Other Tools +* Code Statistics: lines, cyclomatic complexity +* Other Tools: formating, code explorer -**11. Advanced Topics** +[**14. Advanced Topics**](https://github.com/FedericoUnivr/Modern-CPP-Programming/blob/master/14.Advanced_Topics.pdf) * Move Semantic -* C++ Idioms +* Type deduction +* C++ Idioms: rule of three/five, singleton, PILP, CRTP * Smart Pointers * Concurrency -* C++ Guidelines + +[**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 -(github **issues** panel). +(**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) [federico.busato@univr.it](mailto:federico.busato@univr.it) +* `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) 2018, Modern C++ Programming +> Copyright (c) 2019, Modern C++ Programming > All rights reserved. > > Redistribution and use in source and binary forms, with or without diff --git a/ToDo.md b/ToDo.md deleted file mode 100644 index 0209077..0000000 --- a/ToDo.md +++ /dev/null @@ -1,8 +0,0 @@ -## To Do ## - -* (01) Basic Concepts I -> Catastrofic Cancellation (loss of significance) -* (11) Advanced Concepts -> volatile keyword -* (12) Code Optimization -* (12) Code Optimization -> optimize the compile time -* (B) Appendix -* C++17