Search

The C++ Tutorial

LearnCpp.com is a free website devoted to teaching you how to program in C++. Whether you’ve had any prior programming experience or not, the tutorials on this site will walk you through all the steps to write, compile, and debug your C++ programs, all with plenty of examples.

Becoming an expert won’t happen overnight, but with a little patience, you’ll get there. And LearnCpp.com will show you the way.


Chapter 0 Introduction / Getting Started
0.1
Updated
Introduction to these tutorials
0.2
Updated May 20
Introduction to programming languages
0.3
Updated May 21
Introduction to C/C++
0.4
Updated
Introduction to development
0.5
Updated
Installing an Integrated Development Environment (IDE)
0.6
Updated
Compiling your first program
0.6a
New
Build configurations
0.7
Updated
A few common C++ problems
 
Chapter 1 C++ Basics
1.1
Updated
Structure of a program
1.2
Updated
Comments
1.3
Updated Sep 7
A first look at variables, initialization, and assignment
1.3a
Updated May 29
A first look at cout, cin, endl, the std namespace, and using statements
1.4
Updated
A first look at functions and return values
1.4a
Updated Jul 23
A first look at function parameters and arguments
1.4b
New Aug 3
Why functions are useful, and how to use them effectively
1.4c
New
A first look at local scope
1.4d
Moved
Keywords and naming identifiers
1.5
Updated
A first look at operators
1.6
Updated
Whitespace and basic formatting
1.7
Updated
Forward declarations and definitions
1.8
Updated
Programs with multiple files
1.9
Updated
Header files
1.10
Updated Oct 12
A first look at the preprocessor
1.10a
Updated Apr 5
Header guards
1.10b
Updated
How to design your first programs
1.11
Moved
Debugging your program (stepping and breakpoints)
1.11a
Moved
Debugging your program (watching variables and the call stack)
1.12
Updated
Chapter 1 comprehensive quiz
 
Chapter 2 Variables and Fundamental Data Types
2.1
Updated Sep 7
Fundamental variable definition, initialization, and assignment
2.2
New
Void
2.3
Updated
Variable sizes and the sizeof operator
2.4
Updated
Integers
2.4a
Moved
Fixed-width integers
2.5
Updated Jun 25
Floating point numbers
2.6
Updated
Boolean values and an introduction to if statements
2.7
Updated
Chars
2.8
Updated May 20
Literals
2.9
Updated Oct 8
Const, constexpr, and symbolic constants
2.10
Updated
Chapter 2 comprehensive quiz
Chapter 3 Operators
3.1
Updated
Operator precedence and associativity
3.2
Updated
Arithmetic operators
3.3
Updated
Increment/decrement operators, and side effects
3.4
Updated
Sizeof, comma, and conditional operators
3.5
Updated
Relational operators (comparisons)
3.6
Updated
Logical operators
3.7
Updated
Converting between binary and decimal
3.8
Updated Jun 24
Bitwise operators
3.8a
Moved Sep 8
Bit flags and bit masks
3.x
Updated
Chapter 3 comprehensive quiz
 
Chapter 4 Variable Scope and More Types
4.1
Updated
Blocks (compound statements)
4.1a
Updated
Local variables, scope, and duration
4.2
Updated Apr 19
Global variables and linkage
4.2a
Updated
Why global variables are evil
4.3
Updated
Static duration variables
4.3a
New Apr 19
Scope, duration, and linkage summary
4.3b
Moved
Namespaces
4.4
Updated
Implicit type conversion (coercion)
4.4a
Updated
Explicit type conversion (casting)
4.4b
Updated Dec 11
An introduction to std::string
4.5
Updated
Enumerated types
4.5a
Moved
Enum classes
4.6
Updated
Typedefs
4.7
Updated Sep 7
Structs
4.8
New Jul 30
The auto keyword
4.x
New
Chapter 4 comprehensive quiz
 
Chapter 5 Control Flow
5.1
Updated May 22
Control flow introduction
5.2
Updated Dec 17
If statements
5.3
Updated Jun 17
Switch statements
5.4
Updated Jun 26
Goto statements
5.5
Updated Jun 30
While statements
5.6
Updated Jul 01
Do while statements
5.7
Updated Jul 07
For statements
5.8
Updated Jul 15
Break and continue
5.9
Updated Jul 15
Random number generation
5.10
New Apr 21
std::cin, extraction, and dealing with invalid text input
5.x
New
Chapter 5 comprehensive quiz

Chapter 6 Arrays, Strings, Pointers, and References
6.1
Updated Jul 22
Arrays (Part I)
6.2
Updated Jul 27
Arrays (Part II)
6.3
Updated Jul 27
Arrays and loops
6.4
Updated Aug 3
Sorting an array using selection sort
6.5
Updated Aug 5
Multidimensional arrays
6.6
Updated Aug 9
C-style strings
6.7
Updated Oct 12
Introduction to pointers
6.7a
New Aug 12
Null pointers
6.8
Updated Aug 24
Pointers and arrays
6.8a
New Aug 15
Pointer arithmetic and array indexing
6.8b
New Aug 15
C-style string symbolic constants
6.9
Updated Aug 18
Dynamic memory allocation with new and delete
6.9a
New Aug 18
Dynamically allocating arrays
6.10
Updated Aug 20
Pointers and const
6.11
Updated Sep 7
Reference variables
6.12
Updated Aug 21
Member selection with pointers and references
6.12a
Updated Oct 30
For each loops
6.13
Updated Aug 25
Void pointers
6.14
New Sep 14
Pointers to pointers
6.15
New Sep 14
An introduction to std::array
6.16
New Sep 28
An introduction to std::vector
6.x
New Oct 5
Chapter 6 comprehensive quiz
 
Chapter 7 Functions
7.1
Updated Oct 12
Function parameters and arguments
7.2
Updated Oct 14
Passing arguments by value
7.3
Updated Oct 23
Passing arguments by reference
7.4
Updated Oct 25
Passing arguments by address
7.4a
Updated Oct 29
Returning values by value, reference, and address
7.5
Updated Oct 27
Inline functions
7.6
Updated Oct 29
Function overloading
7.7
Updated Nov 11
Default parameters
7.8
Updated May 3
Function Pointers
7.9
Updated Nov 15
The stack and the heap
7.10
New Nov 24
std::vector capacity and stack behavior
7.11
Updated Nov 20
Recursion
7.12
Updated Nov 28
Handling errors (assert, cerr, exit, and exceptions)
7.13
Updated Dec 2
Command line arguments
7.14
Updated Dec 3
Ellipsis (and why to avoid them)
7.x
New Dec 4
Chapter 7 comprehensive quiz
 
Chapter 8 Basic object-oriented programming
8.1
Updated Dec 8
Welcome to object-oriented programming
8.2
Updated Dec 9
Classes and class members
8.3
Updated Dec 10
Public vs private access specifiers
8.4
Updated Dec 18
Access functions and encapsulation
8.5
Updated May 13
Constructors
8.5a
Moved Dec 21
Constructor member initializer lists
8.5b
New Feb 12
Non-static member initialization
8.6
Moved Dec 22
Overlapping and delegating constructors
8.7
Updated Dec 24
Destructors
8.8
Updated Jan 5
The hidden “this” pointer
8.9
Updated Jan 7
Class code and header files
8.10
Updated Jan 13
Const class objects and member functions
8.11
Updated Jan 21
Static member variables
8.12
Updated Jan 23
Static member functions
8.13
Updated Feb 8
Friend functions and classes
8.14
Updated Mar 6
Anonymous variables and objects
8.15
New Mar 25
Chapter 8 comprehensive quiz
Chapter 9 Operator overloading
9.1
Updated Mar 29
Introduction to operator overloading
9.2
Updated Mar 30
Overloading the arithmetic operators using friend functions
9.2a
New May 23
Overloading operators using normal functions
9.3
Updated Apr 2
Overloading the I/O operators
9.4
Updated Apr 4
Overloading operators using member functions
9.5
Updated Apr 9
Overloading unary operators +, -, and !
9.6
Updated Apr 14
Overloading the comparison operators
9.7
Updated Apr 15
Overloading the increment and decrement operators
9.8
Updated Apr 18
Overloading the subscript operator
9.9
Updated Apr 28
Overloading the parenthesis operator
9.10
Updated Jun 5
Overloading typecasts
9.11
Updated Jun 5
The copy constructor
9.12
Updated Jun 5
Copy initialization
9.13
Updated Jun 5
Converting constructors, explicit, and delete
9.14
Updated Jun 5
Overloading the assignment operator
9.15
Updated Jun 11
Shallow vs. deep copying
 
Chapter 10 Composition
10.1 Moved to lesson 8.5a
10.2 Composition
10.3 Aggregation
10.4 Container classes
 
Chapter 11 Inheritance
11.1 Introduction to inheritance
11.2 Basic inheritance in C++
11.3 Order of construction of derived classes
11.4 Constructors and initialization of derived classes
11.5 Inheritance and access specifiers
11.6 Adding, changing, and hiding members in a derived class
11.7 Multiple inheritance
11.8 Virtual base classes
 
Chapter 12 Virtual Functions
12.1 Pointers and references to the base class of derived objects
12.2 Virtual functions and polymorphism
12.3 Virtual destructors, virtual assignment, and overriding virtualization
12.4 Early binding and late binding
12.5 The virtual table
12.6 Pure virtual functions, abstract base classes, and interface classes
 
Chapter 13 Input and output (I/O)
13.1 Input and output (I/O) streams
13.2 Input with istream
13.3 Output with ostream and ios
13.4 Stream classes for strings
13.5 Stream states and input validation
13.6 Basic file I/O
13.7 Random file I/O
 
Chapter 14 Templates
14.1 Function templates
14.2 Function template instances
14.3 Template classes
14.4 Expression parameters and template specialization
14.5 Class template specialization
14.6 Partial template specialization
 
Chapter 15 Exceptions
15.1 The need for exceptions
15.2 Basic exception handling
15.3 Exceptions, functions, and stack unwinding
15.4 Uncaught exceptions, catch-all handlers, and exception specifiers
15.5 Exceptions, classes, and inheritance
15.6 Exception dangers and downsides
 
Chapter 16 The Standard Template Library
16.1 The Standard Template Library (STL)
16.2 STL containers overview
16.3 STL iterators overview
16.4 STL algorithms overview
 
Chapter 17 std::string
17.1 std::string and std::wstring
17.2 std::string construction and destruction
17.3 std::string length and capacity
17.4 std::string character access and conversion to C-style arrays
17.5 std::string assignment and swapping
17.6 std::string appending
17.7 std::string inserting
 
Appendix A Miscellaneous Subjects
A.1 Static and dynamic libraries
A.2 Using libraries with Visual Studio Express 2005
A.3 Using libraries with Code::Blocks
 
Appendix B C++11 (Formerly C++0x)
B.1 Introduction to C++11
B.2 Long long, auto, decltype, nullptr, and enum classes
B.3 Range-based for statements and static_assert
B.4 Initializer lists and uniform initialization
B.5 Delegating constructors
B.6 New virtual function controls (override, final, default, and delete)