Programming in C++.
Lectures: Tuesday 16-18, Room 141.
Laboratory: Tuesday 18-20, Room 7
Experience in one programming language, e.g.
C, Java or Python.
Exercises must be shown on Linux computers in lab 07 or 137.
YOU MUST BE WILLING TO USE LINUX!
This is an overview of the basic
commands of Linux.
C++ is a language that starts at low level, but which is
designed in such a way that programmer can build high-level components.
When you are working on a large project, you build your components,
and after that do not use the low-level features anymore in
the rest of the project.
If you are joining an existing project or using libraries, you
probably never have to deal with the low-level aspects of the language.
If you are working on a large project, and after half a year still
doing low-level programming, then you are doing something wrong.
The bad reputation of C++ is caused by programmers and teachers
that never manage to leave the low-level programming.
24.02.2015. History of C++, General Remarks.
Comparing C++ with C and Java. Memory organization in C programs.
03.03.2015. Editing, compiling, linking. Separate compilation.
How to use make. Different types of references
and why they are needed.
Basics of class design.
Class = representation + invariants + equivalences.
Design of data structures that use heap allocation.
an object. Difference between initialization and assignment.
Insertion of implicit operations by the compiler.
Initializers in constructors.
The string example that we made in
class. (Probably the smallest string class ever.)
const member functions, private field variables,
inlining, use of this,
why C-style macros should not be used anymore.
(I corrected the overloading rules.)
More about overload resolution rules.
User defined operators.
Hidden temporary objects in expressions,
31.03.2015. Move semantics, temporaries, the
return value optimization, and rvalue references.
I will demonstrate on the
string class that we made before,
that all these things (temporaries, Rvalues, return value
optimization) exist in real.
(I made some improvements and additions on april 12th.)
Automatic generation of copy/assignment operators.
Use of noexcept in move construction.
Second part of lecture: STL containers,
vector, string and list.
Amortized complexity of push_back( ) on vector.
STL: map and hashmap. slides.
Alternative ways of passing comparators and hash functions
to map and hashmap. (Explicit eonstruction, Lambdas, and
Priority queues and how
to use them in search algorithms.
Template classes and functions.
These are the slides.
Templates and lambdas.
Slides about lambdas.
(You have already seem lambdas before).
The other type of polymorphism: Derived classes.
Lecture will be given by
dyrektor of human dialog.
Topics are: Proper use of threading,
and how to design, implement and manage large software
09.06.2015. Last lecture, probably also about derived classes.
Role of Laboratories
The laboratory has two goals which are somewhat in conflict
with each other: I have to teach you, and I have to check/grade you.
The balance between them depends on how much effort I believe
you put in when you made the task.
It is better that you come at the beginning of the lab:
If everyone comes at the end, I will not be able to check
(and improve, see above) your programs. Therefore, come at the
beginning. I give you a task for next week at the beginning, so
that you don't have to waste your time while waiting.
Another advantage of working/starting in the lab is that you can
Tasks must be shown on a Linux computer. My experience is that
in Windows, the integrated environments are not standard conforming,
use most of the screen area for showing all the fancy options of the
integrated environment instead of code, error messages and output.
In windows, it it hard to check for memory leaks, etc.
Windows is designed in such a way that the user has no control
over the computer.
The main decisions are taken by the programs, that have too much
freedom to do what they like. As a consequence, you don't know
where your files are stored, what are the access rights, what programs are
being installed, what programs are running and how much resources
they are using, what data is being sent over the internet to whom, etc.
Since this is a non-acceptable situation for a professional, we
will use Linux.
If you bring your own
laptop, try to read the screen from 1 meter distance under an angle of
45 degrees. If you cannot, you should use the computers in the lab.
I usually use this site
for reference about STL, but there is not much info on C++ 11 yet.
Homepage of Bjarne Stroustrup about
I will freely use C++ 11 in exercises.
The wikipedia page about
is also quite good.
An explanation why
Java is better than C++. (These are not ordinary lies.
This text is written by professionals.)
Most of the points will be addressed in the lectures.
Exercise number 1.
Basics of Linux.
Example of a makefile.
Exercise number 2.
You need the following files:
Exercise number 3.
Exercise number 4.
You need the files in
You need the files in
This exercise changed quite a lot since last year!
about vector and list, and polymorphism.
about std::map and std::unordered_map.
about alternative ways of passing
comparators and hash functions to maps.
about solving the 15-puzzle, using unordered_map and
You need these files.
You need these files.
There were 12 exercises. Every exercise is good for 10 points. This means
that there are 120 points in total. Exercises 1,2,3,4,5 must be
made in all cases. Grades are obtained from the
points as follows:
70 => 3.0
80 => 3.5
90 => 4.0
100 => 4.5
110 => 5.0