Skip to main content

Software Development with C++ (2018/19)

This course provides a basic introduction to the C++ programming language (in particular the C++11 standard) 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 taught by Tom Latham from Warwick and Mark Slater from Birmingham.

For students from Warwick and Birmingham, the workshop sessions will take place in room 125 in the Physics West building of the University of Birmingham.

For students from Bristol, please contact Tai Sakuma and Luke Kreczko for information on the location.

The sessions start at 10am and, with an hour break for lunch, will likely finish between 4 and 5pm.

Course Content

The links to the material for each workshop will appear here as the course progresses:

  Name Description Last Updated
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. 04/10/18
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. 11/10/18
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. 01/11/18
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. 08/11/18
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. 23/11/18
Day 6 This day introduces certain features of the language that are either a bit more advanced or that, with the advent of C++11, are now considered to be 'legacy'. 30/11/18
Feedback 13/12/18

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

introtounix_tn.png introtounix2_tn.png introtounix3_tn.png