Course homepage
This course provides a basic introduction to the C++ programming language (in particular the C++11 and C++14 standards) and tools and techniques for software development. It is designed for those with little to no programming experience, and is delivered as a series of six full-day hands-on workshops using a UNIX development environment.
If you are attending the course, you should have experience with the UNIX command line and tools, and be comfortable with using a syntax highlighting text editor such as vim, emacs, kate or genie (or any others). Resources for familiarising yourself (or refreshing your skills) can be found at the bottom of the page. In particular, all of the content of the first set and much of the second set of slides will be assumed knowledge. You will also require a free account on the github hosting service, though experience in using git is not required.
The course is being taught by Laurence Hurst from Birmingham, using materials developed by Tom Latham from Warwick and Mark Slater from Birmingham
The workshop sessions will take place on campus at the University of Birmingham. Attendees should have been advised of the room by email.
The sessions start at 10am and, with an hour break for lunch, will likely finish between 4 and 5pm.
For the duration of the course you can use the VM at bham-cpp.hopto.org, which will automatically load the required software when you login. The VM will be deleted shortly after the course, so make sure you push your work to GitHub. The VM is only accessible on campus or via the Unviersity's remote access service.
Course Content
The links to the material for each workshop will appear here as the course progresses:
| Name | Description |
|---|---|
| Day 1 | We begin an overview of the course topics, aims and resources. The first half of the day covers using git to keep track of changes you make to code as it develops. The second half introduces the core C++ syntax and procedural programming. |
| Day 2 | In the first part of the day, we look at using functions to improve our control of program flow and reuse code, and references to make passing arguments to functions more efficient. In the second part of the day we begin to automate the build of our program using CMake and how to factor its functionality into a program and library. The third part of the day covers reading from and writing to files and the implementation of our first cipher: the Caesar cipher. |
| Day 3 | This day introduces object orientation in C++ with structs and classes. In the first part of the day we look at data structures and create a custom type to hold command line data. In the second part of the day, we introduce classes and refactor our Caesar Cipher function into a class. We look at the core functionality of classes, including constructors, member functions and operators. |
| Day 4 | We look first at generating documentation using Doxygen. Then we make more advanced use of the C++ Standard Library, specifically templated containers, iterators and algorithms, in order to implement the Playfair cipher. |
| Day 5 | This day introduces object composition via implementation of the Vigenère cipher. We then discuss public inheritance in C++, the language mechanism for allowing types to behave in different ways as a program runs. Exercises introduce the concept of pure abstract base classes to declare interfaces, and the implementation of concrete classes using public inheritance. |
Additional Resources
Each day provides a list of resources relevant to its content, with a full overview presented on Day 1. If you are unfamiliar with UNIX, the command line and tools or simply wish to refresh your skills, the following resources may be useful:


