Confidently follow learning paths that help you develop the right skills in the right order to achieve your goals.
C++ is an object-oriented programming language that was first developed by Bjarne Stroustrup. It was originally created to be an extension of the C language, which is a middle-level language, and these roots are still present today. C++ can be developed in the object-oriented style, or in the C-style, making it a truly hybrid language. This path will take you from the very basics of programming using C++ and will vault you forward into creating rich applications for the Windows operating system. You can also create platform independent desktop applications in C++ using either the Qt or Cinder frameworks. Those courses are in our library but not listed on this path.Get Started
Software developer, Software engineer, Game programmer, .NET, C, C#
If you’re just learning to program you can get a gentle introduction with Learn How to Program with C++ . If you already know how to program and just want to learn C++, you can start with the C++ Fundamentals course.
If you’re just learning to program you can get a gentle introduction with Learn How to Program with C++ . If you already know how to program and just want to learn C++, you can start with the C++ Fundamentals course. By the time you’ve completed these courses, you’ll be confident in writing basic applications and be familiar with the features offered in C++.
C++ has a reputation for being a very difficult language to learn, and to use well. Changes to the language and the library that accompanies it have changed that. Beginners can now learn C++ and write real applications. In this course you'll learn the important parts of C++ 11 syntax, get an introduction to the most useful parts of the Standard Library, and be challenged to write applications yourself in addition to watching someone else write and explain code.
C++ is a general purpose programming language that is used by millions of developers. It offers a powerful combination of performance and abstraction that other languages don’t have. You can use C++ to write different kinds of applications for a variety of platforms. In this course, I’ll cover basics of language syntax – declaring variables, classes, building expressions using operators and functions – and work up to templates, pointers, const, and polymorphism. I’ll be using the principles of “modern C++” as much as possible, relying on the Standard Library and using idioms like Resource Acquisition is Initialization to reduce the effort involved in memory management. Some people are scared of C++, but I’ll show you how to approach the language without fear.
Good C++ developers know more than just the syntax of the language: they know the libraries that come with it, and they know when to use a particular feature. In this sequel to C++ Fundamentals, you'll learn those things. A quick overview of the Standard Library will provide you with collections, algorithms to work with collections, and string manipulation capabilities, as well as signposts to more Standard Library capabilities. Then perhaps the most important C++11 language change, lambdas, are explained and put in context. Finally exceptions, a powerful error-handling technique, are introduced and you will see their significance for resource and memory management. With the modern C++ foundations complete, the last module of this course goes back in time to the sorts of syntax and idioms you're likely to find in older code, including typedefs, function pointers, void pointers, and C-style strings and arrays. Modern C++ developers must cope with legacy code and this module will show you how.
GCC 4.8 is the first version of the compiler to have complete support for all the C++ features added in the C++11 version of the standard. This course will provide you with detailed information about all of the changes made to the language since C++98/03 and their implementation in GCC.
Writing unit tests is a big part of being a good software developer. Unfortunately, unit testing in C++ is far from being trivial and good unit testing frameworks are hard to find. In this course, C++ Unit Testing Fundamentals Using Catch, you will learn how to write robust unit tests using Catch, a simple-to-use, yet flexible and powerful unit testing framework for C++. You will learn what makes Catch different from other xUnit frameworks, and how it can be used to write unit tests for your C++ code. You will also get to see how to run Catch from the command line, how to use test fixtures, and how to create maintainable tests. When you're finished with this course, you will have a foundational knowledge of Catch and unit testing in C++ that would help you create better, cleaner C++ code.
These intermediate courses will take you on a deep-dive in designing beautiful and functional C++ code. You’ll learn how to write efficient and modern C++ using design patterns and the C++ standard library.
This course is about the practical application of the modern C++ language. It's about using (and creating) modern C++ libraries. You're going to learn how to use a modern C++ style of programming. You will see how it helps to turn C++ into a modern language that's intuitive and elegant. This course covers the essential skills needed by any C++ developer to handle resources and write efficient classes that work well with standard containers. You will also learn all about the standard smart pointers, containers, strings, and regular expressions. Along the way, you'll pick up essential tips and tricks to get the best out of modern C++ using C++11 and beyond.
If you're a C++ developer, save yourself valuable time and work by learning how to use the algorithm header. In this course, Beautiful C++: STL Algorithms, you'll learn the functions in the algorithm header. You'll find out how iterators multiply the power of the library. Next, you'll learn the conventions that lower your mental burden. Finally, you'll learn how to use the same algorithm with different collections so you don't have to learn new functions. After this course, you'll know what the algorithm header has to offer you and how to use it to your advantage while developing.
A look at the creational design patterns and their implementation using Modern C++. Covers the Factory design pattern (Factory Method, Abstract Factory) as well as Builder, Prototype, and Singleton. Also covers the SOLID design principles, demonstrates Dependency Injection via Boost.DI, and even shows an example of a Maybe Monad.
The correct application and recognition of design patterns is an important skill for developers and architects. This course, Design Patterns in C++: Structural - Adapter to Decorator (part of a multi-series course on C++ patterns), introduces you to Structural design patterns. First you'll cover the Adapter and Bridge patterns, moving on to the Composite and Decorator design patterns. You'll also be shown different ways in which these patterns can be implemented in modern C++ (C++ 11 and beyond). Software required: a C++ IDE (e.g., Visual Studio, CLion) or a text editor (e.g., VIM, EMACS) together with a C++ compiler (e.g., GCC, Clang).
The correct application and recognition of design patterns is an important skill for developers and architects. This course, Design Patterns in C++: Structural - Façade to Proxy, is part of a multi-series course on C++ patterns, and it introduces you to structural design patterns. It covers the Façade, Flyweight, Null Object, and Proxy design patterns, showing different ways in which these patterns can be implemented in modern C++ (C++ 11 and beyond). First, you'll learn about Façade. The Façade pattern attempts to hide the interface of a complicated system (often involving several components and their relationships) behind a single, easy-to-use interface. Next, you'll learn about Flyweight, which is used to save up on memory by sharing as much data as is possible with similar objects. After that you'll learn about Null Objects, which lets you provide a neutered, no-op object which conforms to the interface but does absolutely nothing at all. Finally, you'll learn about Proxy design patterns, which lets an object 'stand in' for another object, conforming to the same interface while performing additional operations. By the end of this course, you should be able to recognize these design patterns in other libraries and you'll be able to then apply these patterns in your own work.
Our advanced C++ courses are not for the faint of heart, but don’t be afraid! You will gain a deeper understanding of threading and synchronization and some pro tips for squeezing the most performance possible out of your code.
This course will introduce you to modern C++ concurrency on the Windows operating system. Unfortunately, standard or portable concurrency is still in its infancy so a comprehensive study of concurrency cannot get away from the practical and platform-specific aspects of the craft. As such, this course uses the Windows operating system as the playground to explore concurrency in C++. This course will prepare you with a deep understanding of threads and synchronization at the OS level, including modern synchronization primitives such as slim reader/writer locks and condition variables. You will learn all about the mighty Windows thread pool API and the Concurrency Runtime. Finally, you will be introduced to some of the shortcomings that plague the C++11 Thread Support Library.
Do you want to get the absolute most performance out of your hardware? Want to write code that scales across CPU registers, multi-core, and machine clusters? Then this is the course for you!