1. A
    1. API
    2. ASAN
    3. Access specifiers
  2. C
    1. Constructor
    2. const
  3. G
    1. GDB
    2. g++
  4. M
    1. Make
    2. Memory Leak
  5. P
    1. Pointer
  6. R
    1. Recursion
  7. S
    1. std
  8. V
    1. Valgrind
Completed: / exercises

Getting Started

Please read carefully through the following sections.

Enroll in This Course on Lovelace

To access the above tasks and other exercises in the course, you need to make sure you are enrolled in this course on Lovelace. Once you are enrolled, the exercises and tasks become visible on the home page of our course: CPP. Otherwise, only general information is displayed; exercise pages are hidden to unenrolled students.


To communicate with us and your classmates we will use Discord. Rather than emailing questions to us, we encourage you to post your questions there. Don't be shy! On Discord, you will be able to get answers to your questions, help us answer questions from other students, find teammates for projects, and talk to us and each other 24/7.
Note: a server-wide rule for our Discord is to NOT EVER SEND DM MESSAGES to staff. DMs are strictly prohibited by the admins.
We will email you Discord registration instructions on the first day of classes.


We will hold in-class lectures according to our schedule. After each lecture we will release the accompanying lecture slides, any code used in lectures, and a YouTube video recording.

C++ References

Exercise Lab, TS 135

For lab exercises, you are assigned to use room TS135 during the specified times, which can be found on our course schedule page. Lab assignments may be completed in groups of 2-3 students, though you are also welcome to work on them individually.
Please note that attendance at the labs is not mandatory. You have the option to complete your assignments at home using your own PC or laptop. However, the scheduled lab times provide an opportunity for you to receive assistance from us and to meet your classmates.
Important Note: Due to the large number of students enrolled (~200) and the limited number of PCs (20+) available in TS135, most of you will not have the opportunity to attend the labs in person during this pilot run of the course.

Forming Groups

In this course, you will work individually on most exercises (MPs, exams), with the exception of lab exercises, which can be completed in groups. To form groups for lab exercises, please follow these instructions: Forming Groups on Lovelace.

Course Work

Passing Criteria and Grading Breakdown

You need to accumulate more than 65 points to pass the course.
Final Grade Scale:
5: For scores greater than 95 points.
4: For scores greater than 90 points.
3: For scores greater than 80 points.
2: For scores greater than 70 points.
1: For scores greater than 65 points.

Late Submission Policy

If you submit after the deadline, 20% are automatically deducted for each assignment, no exceptions without official documents.
API stands for Application Programming Interface. In the context of this course, you can consider the header files to be such interfaces, as they determine what class functions and properties are public and thus accessible from anywhere.
AddressSanitizer (ASAN) is a memory error detector for C/C++. In this course, the makefiles will typically compile an executable that uses ASAN, with "-asan" at the end of its name.
The two notable access specifiers are:
  • public: class members defined after the public keyword are accessible from outside the class.
  • private: class members are generally private by default and thus not accessible from the outside
Constructor is a special non-static member function of a class that is used to initialize objects of its class type. A constructor is called upon initialization of an object. A constructor without arguments is a default constructor, but constructors that take arguments can be defined.
GDB, the GNU Project debugger, allows you to see what is going on `inside' another program while it executes -- or what another program was doing at the moment it crashed.
GDB can do four main kinds of things (plus other things in support of these) to help you catch bugs in the act:
  • Start your program, specifying anything that might affect its behavior.
  • Make your program stop on specified conditions.
  • Examine what has happened, when your program has stopped.
  • Change things in your program, so you can experiment with correcting the effects of one bug and go on to learn about another.
GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files. Make gets its knowledge of how to build your program from a file called the makefile, which lists each of the non-source files and how to compute it from other files. When you write a program, you should write a makefile for it, so that it is possible to use Make to build and install the program.
Memory leak means that the program is not freeing up memory it reserves. The memory will be freed when the program terminates, but if a program keeps leaking more and more memory without terminating, it can become a huge issue!
A typical way for memory leaks to occur is reserving memory with new and not calling delete before the pointer goes out of scope.
Pointer variables store a memory address as their value. In other words, they point to some data. The data can be accessed by dereferencing the pointer. (Either like *p or p->...)
A recursive function calls itself from within it. The recursion call must be conditional or it would lead to an infinite loop.
Valgrind is another tool besides ASAN that you can use in this course. It can detect many memory-related errors that are common in C and C++ programs and that can lead to crashes and unpredictable behaviour.
const is a keyword meant to mark something as immutable
  • A const object cannot be modified: attempt to do so directly is a compile-time error, and attempt to do so indirectly (e.g., by modifying the const object through a reference or pointer to non-const type) results in undefined behavior.
  • const keyword on an object's member function prevents the object from being modified in the function
  • Pointer declarations can have 2 const keywords, one to make the data that's pointed at unable to be modified and one to make the pointer itself unable to be modified
Using const improves code readability and prevents accidental modification of objects.
g++ is a C++ compiler that we primarily use for this course. It is the C++ compiler for the GNU compiler collection. You may sometimes see gcc being used instead of g++, which was originally the GNU C compiler, but calling gcc generally also compiles .cpp files as C++. However, calling g++ is preferred.
In C++, std stands for Standard Library, which is a collection of commonly useful classes and functions. Typically, these are defined in the std namespace.