Kurs i Grundläggande Modern C++

Grundkurs i modern C++, baserat på nya standarden C++ 11/14/17

Nya standarden C++11/14/17 har tagit världen med storm och C++ har återtagit rollen som ett modernt systemutvecklingsspråk. I denna kurs bygger vi effektivt upp dina nya kunskaper och färdigheter i modern C++.

Vi kan inte motstå att citera Bjarne Stroupstrup, språkets upphovsman när han uttalar sig om detta:

Within C++ is a smaller, simpler, safer language struggling to get out.

Där han sätter fokus på att

...code that is statically type safe, has no resource leaks, and catches many more programming logic errors than is common in code today. And it will run fast.
Detta får du lära dig
  • Programmera i Modern C++
  • Effektivt använda standardbiblioteket
  • Designa egna datatyper
  • Förstå och tillämpa insikter gällande minneshantering i C++
Kursinnehåll

Background and Overview

Några ord om hur språket utvecklats och vad som avses med "Modern C++".

    Scalar Types and Operators

    Språkets enklaste byggstenar

    • Integral types
    • Floating-point types
    • Boolean
    • Characters
    • Type variations, such as short/long, signed/unsigned
    • Variables
    • Lexical scopes
    • Automatisk typinference med "auto"

    Composite Types

    Genomgång av vilka sammansatta datatyper som finns

    • Native arrays
    • Struct
    • Classes (briefly)
    • Unions
    • Enum types
    • Name spaces
    • Type aliases

    Statements

    Genomgång av vilka programsatser som finns

    • If statements
    • While loops
    • For loops
    • Foreach loops
    • Switch statements

    Functions

    Funktioner och alla dess variationer

    • Function syntax
    • Call by-value vs. call by-reference
    • Return by reference
    • Overloaded functions
    • Default parameters
    • Template functions
    • Extern declarations
    • Compilation units
    • Program organization
    • Linking C code

    Lambda Expressions

    Med införandet av lambda uttryck har C++ definitivt tagit steget in bland moderna och hippa programspråk

    • Lambda syntax
    • Passing free variables by reference or value
    • Functions taking lambdas as parameters and/or returning lambdas

    Pointers and references

    Genomgång av pekarbegreppet i C/C++ och varför man bör undvika pekare

    • Pointer declarations
    • Dereferencing operator
    • Address operator
    • Pointer arithmetics
    • Dangling pointers
    • The illusion of arrays
    • Nativ text strings and the danger of using them
    • Pointers to struct/class objects
    • Function pointers
    • References
    • Call-by reference
    • Return by-reference
    • What is move semantics
    • Rvalue references

    Text Strings and Regexs

    Majoriteten av buggarna i C/C++ program härrör från pekar-baserade text-strängar. Bara genom att konsekvent använda std::string i stället, så ökar programkvalitén signifikant. Här går vi igenom hur du använder string klassen på bästa sätt och hur du bäst använder stödet för reguljära uttryck.

    • Why using std::string instead of nativ strings
    • Overview of std::string and its functions/operators
    • What is SSO (Short String Optimization) and how it is used
    • Working with legacy strings
    • Character oriented functions
    • Multi-line string literals
    • What is a regex
    • The regex support in modern C++
    • Matching text data to patterns
    • Searching using patterns
    • Replacing text fragments using patterns
    • Using regex iterators
    • Typical use cases
    • Splitting and joining strings

    I/O Streams and Files

    Här går vi igenom hur du använder formatterad in- och utmatning till terminalen, filer och buffertar. Dessutom, hur du hanterar binära filer.

    • ostream / ofstream / ostringStream
    • istream / ifstream / istringstream
    • Bi-directional I/O with fstream
    • Manipulators
    • The input idiom
    • Line-oriented input
    • Word-oriented input
    • Character-oriented input

    Helper Types

    Genomgång av några hjälptyper som används på andra ställen

    • Pair
    • Tuple
    • Date-times
    • Durations
    • Clocks
    • Date formatting
    • Random number generators

    Container Types

    Standardbiblioteket innehåller ett flertal mycket användbara container-datatyper.

    • Sequence containers and typical methods
    • vector / dequeue / array
    • list / forward_list
    • Associative containers
    • Tree vs. hash implementations
    • Unique vs. multi-key versions
    • set / unordered_set
    • map / unordered_map
    • Container adapters

    Iterators and Intervals

    Här går vi igenom det för nästa kapitel mycket viktiga iterator begreppet och vad som menas med ett intervall

    • What is an iterator
    • What is a range and how is it used
    • Iterator categories
    • I/O iterators
    • End-point adapter functions

    STL Algorithms

    Standardbiblioteket har ett stort utbud av "smör&bröd" funktioner som utför typiska programmeringsuppgifter, såsom kopiering, sökning, sortering, aggregering med mera. Här går vi igenom hur du använder dessa på bästa sätt.

    • What is a std::* algorithm
    • The STL architecture
    • How to pass the business logic into algorithm functions
    • Understanding *_n and *_if suffixes of functions
    • Using functions with predicates
    • Using back_insereter iterators
    • Transforming and aggregating
    • Sorting
    • Populating data inot containers

    Classes (User Defined Types)

    Fram till detta kapitel har du fått använda det befintliga språket och dess standardbibliotek. I detta och de följande kapitlen får du lära dig att bygga egna data-typer med klasser.

    • What is a user-defined type
    • Specification vs. implementation
    • Member variables and functions
    • Object creation (instantitation)
    • Visibility
    • Constructors
    • Destructor
    • Inline member functions
    • Member overloading
    • The pointer 'this'

    Class Member Forms

    Klasser kan innehålla mer än bara variabler och funktioner och här går vi igenom vilka dessa är.

    • Class variables and functions
    • Member references
    • Read-only variables
    • Const marked functions
    • Inner classes
    • Friend declarations

    Constructors and Destructors

    Det finns en hel del specialformer av konstruktorer och här går vi igenom vilka dessa är.

    • Initialization
    • Default constructor
    • Destructor
    • Copy constructor
    • Assignment operator
    • Pitfalls
    • Standardized class form
    • Enforcing compiler-generated members
    • Deleting compiler-generated members
    • Type conversion constructor
    • Type conversion operator
    • What is move semantics
    • Move constructor
    • Move assinment operator

    Heap Allocated Objects

    Här går vi igenom hur du skapar dynamiska objekt

    • What is dynamic memory anyway
    • Using the new and delete operators
    • Pitfalls
    • The placement variant of new

    Exceptions

    Undantagshantering i C++ är viktigt för att kunna separera affärslogik från felhantering.

    • What is an exception
    • Throwing exceptions
    • Catching exceptions
    • The merrits of automatic destructions during throw
    • Exceptions in the standard library
    • Pitfalls

    Templates

    Modern C++ handlar i stor utsträckning om att hantera funktions- och klassmallar. I detta kapitel går vi igenom att du behöver veta för kunna använda mallar på bästa sätt.

    • What is a template
    • Function templates
    • Class Templates
    • Member function templates
    • Template parameter forms
    • Type eqiuvalence
    • Template specialization
    • Pitfalls
    • Type traits
    • Using decltype()
    • Variadic templates

    Operator Overloading

    Att kunna omdefiniera operatorer för dina egna datatyper är viktigt för på på bästa sätt skapa ett DSL (Domain Specific Language), vilket handlar om att lyfta programmeringsnivån för att öka kvalitén och minska buggfrekvensen och därmed korta utvecklingstid och kostnad.

    • What is operator overlaoding
    • Syntax
    • Overloadable operators
    • Rule set
    • Overloading of arithemtic operators
    • Overloading of relational operators
    • Overloading of I/O operators
    • Overloading of ++/-- operators
    • Overloading of the index operator
    • Overloading of the arrow operator
    • Overloading of the function-call operator

    Inheritance and Virtual Functions

    Arv och dynamisk bindning är det som definierar objekt-orienterad programmering. Här går vi igenom allt du behöver veta för att på bästa sätt ta vara på denna programmeringsparadigm i C++.

    • Whats is inheritance
    • Syntax
    • Protected visibility
    • Invocation of super-class members
    • References and pointers of root class type
    • Performing down-casts using dynamic_cast
    • Constructor initialization order
    • Base class visibility
    • Virtual member functions and why they are important
    • Abstract functions
    • Use of override and final specifiers
    • Multiple inheritance and why you need to be careful
    • Implementing Java-style interfaces in C++

    The Pre-Processor

    C/C++ förlitar sig på ett speciella steg före själva kompileringen. I detta steg kopieras filer in, macron expanderas och det är också möjligt att villkora inkluderingen av valda kodsegment.

    • Include files
    • CPP constants
    • Pre-defined constants
    • Conditional compilation
    • Include guards
    • CPP macro functions
    • Stringification and name catenation
    • Assertions

    Building C++ Applications

    I detta avsnitt går vi in på alla detaljer i hur man bygger C++ applikationer och skapar bibliotek, såväl statiska som dynamiska.

    • Compilation steps
    • What is an abstract syntax tree (AST)
    • The assembler
    • Inline assembly code
    • The linker
    • Name mangling of C++ names
    • Inspecting the linker symbol table
    • The loader
    • Tracing executions
    • Compiler flags for warnings
    • Compiler flags for optimizations
    • Compiler flags for debugging
    • Creating a static archive file
    • Creating a dynamic linked library

    Build Tools and Open-Source Libraries

    I detta avrundande avsnitt gör vi en översikt över byggverktyg och några open-source bibliotek vi tycker är bra att känna till.

    • Make
    • GNU Autotools
    • CMake
    • Gradle
    • Doxygen
    • Google Test
    • log4cxx
    • Boost
    • Poco

    Standards and Guidelines

    Till slut avrundar vi med att diskutera hur man kan följa evolveringen av C++ standarden och riktlinjer för programming enligt "Modern C++".

    • Tracking the standard
    • Tracking compilers and what they support
    • Online compilers
    • The big C++ conference (cppcon)
    • The C++ Core Guidelines
    • GSL - The Guidelines Support Library
    SnabbFakta
    NamnKurs i Grundläggande Modern C++
    Längd 5 Dagar
    NivåBeginner
    MålgruppTekniska programmerare
    Förkunskaper Praktiska kunskaper i något kompilerande språk
    Verktyg
    • GCC/G++ compiler, version 8 or later
    • Jetbrains CLion IDE
    • Ubuntu Linux @ VirtualBox or WLS @ Windows-10
    Pris27 000 kr + moms 27000
    KursDatum
    DatumPlats
    Hämtar kursschema...
    Samma-Företags Rabatt

    Vi ger 20% rabatt för tillkommande deltagare från samma företag vid samma kurs-tillfälle. Läs mer här.

    Företagsintern Kurs

    Om du beställer en företagsintern kurs kommer vi till er och håller kursen i era lokaler. Priset bestäms av vår prismodell och baseras på antalet kursdagar, antalet deltagare, samt i förekommande fall resa och logi.

    Läs mer om vår prismodell och beställningsvillkor här.

    Relaterade Kurser
    KursDagarNivå
    Kurs i Enhetstestning med C++ och Google Test1IntermediateVisa
    Påbyggnadskurs i Modern C++3 IntermediateVisa
    Kurs i Programmering med Trådar/Threads i Modern C++3 AdvancedVisa
    Linux Systemprogrammering i C++3Advanced Visa
    C++ 11/14/17 for C++ Programmers3IntermediateVisa