Try   HackMD

Advanced C++ Programming

Location: TBD, 德田館
Time: TBA

``xxx''
-- xxx

Class Information

Instructor

Prerequisites

Development Environment

  • We will follow C++ 14/17 and use GNU GCC compilers.
  • Please follow this page.

Recording Classroom Lectures Policy

Recording of classroom lectures is prohibited unless advance written permission is obtained from the class instructor and any guest presenter(s).

Overview

Basics of C++

  • Introduction to computer systems: CPU-memory model
  • Data types (int, double, string, bool), variable declaration, and basic operators
  • Flow controls (if-else, switch-case-break-default, while, do-while, for)
  • Array, function, and pointer & reference
  • Struct and union

Object-Oriented Programming (OOP)

  • Object & class
  • Encapsulation: public, private, protected, and friend members
  • Inheritance
  • Virtual functions and function/operator overriding
  • Subtype polymorphism
  • Generic programming: templates
  • Annoymous function: lambda

Standard Template Library (STL)

  • Iterators
  • Containers
    • vector, list, queue, stack, set
    • map
  • Algorithms
    • sort
    • search
    • merge
    • for_each
    • transform

Design Patterns

  • Creational patterns: singleton, factory method, abstract factory
  • Structural patterns: adapter, bridge, proxy, decorator, sharing (interning, flyweight)
  • Behavioral patterns: iterator, strategy, observer (publish/subscribe)
  • Application: QunatLib

Multithreading Programming

  • Basic concepts of operating systems (OS)
  • Thread & Runnable
  • Race condition, mutual exclusion & synchronized methods/blocks
  • Producer-consumer problem (bounded-buffer problem) & semaphores
  • Dining philosophers: deadlock, livelock, starvation
  • High-level concurrency framework: thread pools, fork-join pools, asynchronous computation, concurrent data structures, atomic variables, synchronizers, monitor locks

MISC

References

C++

  • Josh Lospinoso, C++ Crash Course: A Fast-Paced Introduction, 2019

Object-Oriented Programming

Design Patterns

Concurrent Programming

Applications

Linux Kernel Development

CUDA

QuantLib