Programming in C++
Table of Contents
- Other Textbooks by the Author
- About the Lecture Slides
- About the Author
- Lecture Slides Abstract
- Lecture Slides License
- Obtaining the Lecture Slides (E-Book and Print)
- Git Repository
- Join the Google Group for the Lecture Slides
- Video Presentations
- Other Video Presentations
- Additional References
The author also has the following (open-access) textbooks:
- Multiresolution Signal and Geometry Processing: Filter Banks, Wavelets, and Subdivision
- Signals and Systems
For additional information about the contents of the lecture slides, refer to the Lecture Slides Abstract section.
For more details about the author, please visit his home page.
This document constitutes a detailed set of lecture slides on programming using the C++ programming language. The topics covered are quite broad, including the history of C++, the C++ language itself, the C++ standard library and various other libraries, and software tools, as well as numerous other programming-related topics. Coverage of C++ is current with the C++14 standard.
Many aspects of the C++ language are covered from introductory to more advanced. This material includes: language basics (objects, types, values, operators, expressions, control-flow constructs, functions, and namespaces), classes, templates (function, class, alias, and variable templates; template specialization; and variadic templates), lambda expressions, inheritance and run-time polymorphism, exceptions (exception safety, RAII, and smart pointers), rvalue references (move semantics and perfect forwarding), concurrency (sequential consistency, atomic memory operations, data races; threads, mutexes, condition variables, promises and futures, atomics, and fences; happens-before and synchronizes-with relationships; and sequentially-consistent and other memory models). A number of best practices, tips, and idioms regarding the use of the language are also presented. Some aspects of the C++ standard library are covered, including: containers, iterators, and algorithms; the std::vector and std::basic_string classes; I/O streams; time measurement; and smart pointers. Various general programming-related topics are also presented, such as material on: good programming practices, finite-precision arithmetic, software documentation, software build tools (such as CMake and Make), and version control systems (such as Git).
The lecture slides are
licensed under a
Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
This license allows for a work to be distributed freely, subject to
certain quite reasonable conditions (e.g., no commercial use).
Refer to the above link for more details on the license.
All versions of the lectures slides that are currently available are listed below. All versions of these documents are available in electronic form (i.e., PDF format) for download from this web page. (See below.) Some versions of these documents are also available in print form via online order from the University of Victoria Bookstore.
The available versions of the lecture slides are as follows:
(Most Recent Version)
- M. D. Adams, Lecture Slides for Programming in C++ (Version 2017-02-24), University of Victoria, Victoria, BC, Canada, Feb. 2017, xviii + 1139 slides. ISBN 978-1-55058-608-4 (print), ISBN 978-1-55058-609-1 (PDF).
- M. D. Adams, Lecture Slides for the C++ Programming Language (Version 2016-01-18), University of Victoria, Victoria, BC, Canada, Jan. 2016, xviii + 903 slides. ISBN 978-1-55058-582-7 (paperback), ISBN 978-1-55058-583-4 (PDF).
- M. D. Adams, An Introduction to the C++ Programming Language (Version 2015-02-03), University of Victoria, Victoria, BC, Canada, Feb. 2015, xii + 702 slides. ISBN 978-1-55058-537-7 (paperback), ISBN 978-1-55058-538-4 (PDF).
The lecture slides have a companion Git repository that is hosted by GitHub. This repository contains numerous code examples and programming exercises. The URL for the main web page associated with the repository is:
If you find these lecture slides useful (as a student, instructor, or otherwise), the author would ask that you please consider joining the (moderated) Google Group for announcements regarding these lecture slides. This will benefit you by allowing you to receive notifications of new releases of the lecture slides. To join the Google Group for the lecture slides, simply enter your email address in the box below and click on the "Subscribe" button.
|Subscribe to An Introduction to the C++ Programming Language Lecture Slides Announcements|
|Visit this group|
The following video presentations are available for the lecture slides:
- Software Tools
- Lambda Expressions (coming soon)
- Classes and Inheritance (coming soon)
- Standard Library
- Exceptions (coming soon)
- Rvalues References (coming soon)
- Computational Geometry Algorithms Library (CGAL)
- Open Graphics Library (OpenGL)
- Signal Processing Library (SPL)
- Version Control Systems (Git)
- Build Tools (Make and CMake)
Some video presentations by others (i.e., not by the author of this page) that may be of interest are as follows:
Some other references that may be helpful are as follows: