
This video will give you an overview about the course.
Introduce the Integrated Development Environment (IDE) which is what will be used when developing C++ Code.
Download the IDE from Microsoft
Install the IDE
Create a new Empty Project named Hello World
Demonstrate the basic usage of the IDE. Once open show how to create a new program and what the different sections of the IDE are presented for MS VS 2017.
Open Microsoft Visual Studio 2017
Open previous project of Hello World
View the different aspects and configurations of the IDE
What is a C++ program comprised of? View the different components such as file structure and a sample program structure.
Add a new source.cpp file to the source folder
Create a sample Hello World Program
Receive an explanation of the structure of the .cpp or .h file
What are Variables? Explain what a Variable is while going through the different types of Variables. Variables can be utilized in different ways which is why their types are important to discern.
Define a variable
Define the different variable types
How to use Variables in a program to output data. Demonstrating how to create a Variable of different types, initializing it and outputting that Variable to screen.
Create a char variable and display its contents to screen
Create a string variable and display its contents to screen
How to use Variables in practical applications. Use multiple different Variable types to create a calculator program that can output calculations to screen. Also demonstrate the difference between Integer and Float arithmetic.
Create two integer variables and output the math results to screen
Create two float variables and output the math results to screen
Mix integer and float variables together and view the math results to screen
A program can make decisions based on conditions presented to them. Show what a basic conditional statement is and how a program will make a decision based off that specific condition.
Define a conditional statement and demonstrate with a visual
Show all comparison operators
Demonstrate with a code example
What if we have more than one condition to check? With understanding the basics of a conditional statement we will grow our understanding to include multiple conditions with if else statements. Build if else, or if else if statement block to deal with multiple conditional checks.
Show If Else and If Else If blocks
Demonstrate in code an if else if block
Describe the importance of the else usage
What if one conditional statement leads to another? Nested if statements will resolve this issue. We will demonstrate how nested if’s work. We will also go over composite statements that utilize ands (&&) as well as or (||) in a conditional statement. This will increase a developers capabilities.
Demonstrate a nested if statement
Demonstrate composite statements with and’s
Demonstrate composite statements with or’s. Show effacement usages
Is there another way to perform a conditional statement check? Yes, utilizing a switch statement we can perform a conditional check. We will review and demonstrate switch statements.
Change the grade if statement to a switch statement to show similarities
Demonstrate the switch statement execution
Discuss the difference between switch and if conditional statements
Is there a way to perform quick conditional checks rather than long written out ifs? Yes, using ternary operators you can write out simple one line conditional checks that minimize code blocks which is an efficient way to write code.
Show the components of a Ternary Operator
Demonstrate the Ternary Operator in code
Explain why the Ternary Operator is useful
What are loops and why are they important? We will introduce the concept of loops and how they make coding more efficient as well as cut down on the repetition of code.
Define what a loop is using a practical example
Define different parts of a loop
Demonstrate a loop with a visual graph
Introduce the user to the first example of a loop process called the while loop. We will use a practical example to show how to execute a while loop.
Show a while loop structure in code
Demonstrate the execution of a while loop
Show an example of postfix incrementation
Introduce the user to the second loop example of a do while loop. Explain the similarities and differences between a while and do while loop. Also talk about the advantages and disadvantages.
Explain the differences between a while and do while loop
Show an execution example of a do while loop
Explain the advantages or disadvantages to a do while loop
Introduce the user to a for loop example. Explain the different components to the loop and how it operates. Use a simple example to show its operation.
Explain the differences between a while, do while, and for loop
Explain the for loop components and execution
Show a programmatic example of for loop execution
Is it possible to nest loops? Yes, when you need to nest loops it is a possible. We will show how to nest loops and why it is useful when traversing multidimensional data objects.
Show an example of how a loop traverses multidimensional data object
Demonstrate the traversal of a multidimensional data object in code
Discuss the efficiency used in using nested loops
Explain what the difference is between the two. Explain the different means for getting input into the executing program.
Define Input and Output
Explain the different means for input
Explain the different means for output
Explain how a computer program can interact with a user to get input from them. Demonstrate a user input in a calculator program.
Explain how to get user input
Explain the syntax required for user input
Demonstrate user input in a calculator program
In this video we will demonstrate the process for getting input from a file or input stream. We will show how to open a stream, confirm it is open, read the input, and close the stream once done ingesting the data.
Demonstrate the input usage of the fstream library
Show a code example on using a stream to ingest data from a file
Reiterate that it’s important to close the stream once done reading data
In this video we will demonstrate the process for outputting data to a file with a stream. We will show how to create a stream, open the stream, write data, and close the stream once completed.
Show the output usage of fsteam
Show a code example on how to output data to a file
Reiterate that it’s important to close the stream once writing is done
We will define what a function is and how it is useful in software development. We will also discuss why a function is useful in creating efficient code.
Define what a function is
Describe how a function will be used
Explain the advantages of using a function
What does a function look like and how do we use one? We will show how a function is declared and explain the different types of functions that can be used.
Define how a function can be declared
Define the different types of functions
Demonstrate function prototyping
How do you pass data to a function? We will demonstrate the two means for passing data to a function using pass-by-reference and pass-by-value. We will also discuss the advantages and disadvantages between the two methods.
Demonstrate how to show pass-by-value
Explain pass-by-reference and show how to do it
Go over advantages and disadvantages of the two
We will be defining what a data structure is by using a struct as an example. We will also define what a class is and how it is the culmination of the previous concepts learned in this course.
Define what the data structure of a struct is
Show how a struct is used in a code example
Define what a class is
An array is an example of another data structure. This allows us to store data as a collection of elements which we will demonstrate in some code.
Define an array
Show an array’s structure when data is stored
Demonstrate an array in code
A vector is an example of a class. This builds on the understanding of arrays. A vector is a list of elements but has built in functions that can add, remove, count, as well as other functions can be performed to the vector.
Define a vector
Demonstrate how to add and remove data in a vector
Demonstrate how to iterate through a vector to output data
A map is another way to store a list of data, but instead of sequential order we utilize key value pairs. We will define and demonstrate what a map is as well as how to add data or remove data into a map.
Define a map
Demonstrate how to add or remove data into a map
Demonstrate how to iterate through a map to output the data
In this video we will use all previously learned concepts to build a custom class to perform calculator operations. We will define a header file, the source cpp file for the class and execute the full capabilities of the class in an example code.
Define the files in a class
Define the difference between public and private
Show how to create a class and use it in code
This video gives an overview of the entire course.
This video will demonstrate basics of OOP using class keyword.
Learn how to define an object using class keyword
Learn about constructor and destructor functions in a class
Learn about member functions with public, private, and protected attributes
This video will introduce concepts of inheritance, overloading, and polymorphism.
Learn concepts of inheritance by defining and using base and derived classes
Learn concepts of overloading using different function signatures
Learn concepts of polymorphism using virtual member functions
This video will have an exercise. While working on that exercise you can apply all the concepts introduced in the section.
Understand the problem statement
Apply the concepts and start coding
This video will demonstrate concepts of abstraction and encapsulation.
Learn how to create a separation between the interface and the implementation
Learn how to bind data and functions that operate on the data
This video will demonstrate the concept of interfaces.
Learn how to create an interface using pure virtual function
This video will have an exercise. While working on that exercise you can apply all the concepts introduced in the section.
Understand the problem statement
Apply the concepts and start coding
This video will introduce concepts of generic programming using template keyword.
Learn how to create a function template
Learn how to create a class template
Learn how to use default type in a template
This video will introduce code separation using namespace keyword.
Learn how to create a namespace to write and use specific set of code within it
This video will introduce exception/error handling using try-catch keyword.
Learn how to catch exception
Learn how to define custom exception and throw them
This video will introduce you to preprocessor definitions.
Define preprocessor
Learn how to use it for basic generic programming
Learn how to use preprocessor definitions to create portable code
This video will introduce concepts of function pointers.
Learn how to define and use a function pointer
Learn how function pointer can be used as a normal variable
This video will have an exercise. While working on that exercise you can apply all the concepts introduced in the section.
Understand the problem statement
Apply the concepts and start coding
This video will demonstrate how to handle text file on multiple operating systems.
Learn how to create a text file
Learn how to read and write a text file
This video will demonstrate how to handle a binary file on multiple operating systems.
Learn how to create a binary file
Learn how to read and write a binary file
This video will have an exercise. While working on that exercise you can apply all the concepts introduced in the section.
Understand the problem statement
Apply the concepts and start coding
This video will introduce various container classes.
Learn how to work with list
Learn how to work with vector
Learn how to create a hybrid mapped list
This video will introduce string using string class.
Learn how to use string
Learn how to operate on strings
This video will introduce concept of string, file as streams.
Learn how to create a console stream
Learn how to create a string stream
Learn how to create a file stream
This video will introduce standard math classes.
Learn how to use various math functions
This video will have an exercise. While working on that exercise you can apply all the concepts introduced in the section.
Understand the problem statement
Apply the concepts and start coding
This video gives an overview of the entire course.
In this video, we will discuss the merits of using native C++ thread support and concurrency library as opposed to using POSIX pthreads or other third-party threading framework.
Understand the pthread APIs
Write our first multithreaded application
In this video, we will write a multithreaded application using the C++ thread support library. The thread class was introduced in C++11. This function can be used to create a thread.
Use the join() function to block the caller thread or the main thread
Create three unique thread IDs
Processing the ID of your multithreaded application
If you have been looking for the C++ thread class that looks similar to the Thread classes in Java or Qt threads, I'm sure you will find this interesting
Detach a thread to make the threads daemons.
Lock-free thread designs not only avoid thread-related issues, but also improve the overall application performance. However, in a practical world, more than one thread may have to share one or more common resources. Hence, there arises a need to synchronize the critical section of code that accesses or modifies the shared resources. There are a variety of synchronization mechanisms that can be used in specific scenarios. In this video, we will explore them one by one with some interesting and practical use cases.
Take a Bank Savings Account class that allows three simple operations, that is, getBalance, withdraw, and deposit
In this video, we will refractor the threadProc function and synchronize the critical section that modifies and accesses the balance.
Reuse the Thread class and abstract all the thread-related stuff inside the Thread class
Understand how the Thread class that we wrote could be refactored to use the mutex synchronization mechanism
Let's understand the concept of a deadlock with a simple yet practical example. In this video, we will reuse our Thread class with some slight modifications to create a deadlock scenario.
Create two threads, reader and writer
Invoke the Thread::updateCount() method, which in turn will invoke the Thread::getCount() method
Let's try to understand the use case of a conditional variable with a producer/consumer problem. In this video, we will create two threads, namely PRODUCER and CONSUMER. The PRODUCER thread will add a value to the queue and notify the CONSUMER thread. The CONSUMER thread will wait for the notification from PRODUCER. On receipt of the notification from the PRODUCER thread, the CONSUMER thread will remove the entry from the queue and print it.
Declared the ready Boolean flag in the static scope
Add unique_lock that accepts a mutex
In this video, we will define a hello world program using concurrency. Also, we will see the asynchronous message passing using the concurrency support library.
Invoke the sayHello() function without creating a separate thread
Pass a message from a Thread function to the caller function asynchronously
The concurrency support module supports a concept called task. A task is work that happens concurrently across threads. A concurrent task can be created using The packaged_task class. The packaged_task class conveniently connects the thread function, the corresponding promise, and feature objects.
Let's understand the use of packaged_task with a simple example.
Understand how to use a concurrent task with the thread support library
Understand the exception concurrency handling mechanism with a simple example
In this video, we will build google test and mock together as one single static library without installing them.
Invoke the cmake utility to configure our build and autogenerate Makefile.
Create three object files: gtest-all.o, gmock-all.o, and gmock_main.o
In this video, we will see how to write some basic test cases for the production code.
Understand the basic usage of the Google test framework
In this video, we will demonstrate how one can follow the TDD approach while developing an application.
Add test cases of Addition, Subtraction, Multiplication and Division
Refactor the RPNCalculator design
In this video, we will discuss how we can unit test the CUT that has dependencies.
Write the powerOn() test case assuming camera On has succeeded
In this video, we will write BDD test cases using a popular test framework called cucumber-cpp. We will use cucumber-cpp with the gtest framework.
Install the cucumber-cpp framework prerequisite software
Install the Ninja and boost libraries
In this video, we will build the cucumber-cpp framework.
List all the spoken languages supported by the cucumber-cpp framework
Recommended cucumber-cpp project folder structure
In this video, we will see how to write the steps file using the gtest Framework.
Integrating our project in cucumber-cpp CMakeLists.txt
Executing our test case
In this video, we will debug our faulty application to detect the bug. Also, we will explore how to inspect or print the variables.
Add a breakpoint to perform step-by-step execution
In this video, we will detect memory access outside the boundary of an array.
Detect memory access outside the boundary of an array
Detect memory access to already released memory locations
Detect uninitialized memory access
In this video, we will take a simple program that has some memory leaks and explore how the Valgrind tool, with the help of Memcheck, can help us detect memory leaks.
Detect issues arise due to illegal memory access of the already released memory locations
Being a general-purpose programming language, C++ has imperative, object-oriented and generic programming features, while also providing facilities for low-level memory manipulation. Learning the skills to be biased toward system programming and embedded programming, resource-constrained, and large systems, with performance, efficiency, and flexibility of use are essential building blocks of application development.
This course takes a practical and incremental approach. It helps you gain deep knowledge on how to design and build an amazing application using C++. It will first teach you how to set up the environment, where you’ll write your very first program. Then you’ll gently move onto some advanced and interesting topics such as Object-Oriented Programming, Inheritance, and Memory Allocation. Moving further, you will gain an in-depth analysis of classes and the associated OOP concepts, which will empower you to implement the concepts of object-oriented programming (OOP) in real life scenarios. Finally, you will learn to build portable cross-platform applications using the latest C++ features.
Contents and Overview
This training program includes 2 complete courses, carefully chosen to give you the most comprehensive training possible.
The first course, Getting Started with C++ Programming begins by introducing you to the essentials of C++. You will learn how to set up the environment, where you’ll write your very first program. You’ll then work with the basic components and standard library functions that make up the language, and from there, you’ll gently move onto some advanced and interesting topics such as Object-Oriented Programming, Inheritance, and Memory Allocation (all of which will help with better performance and testing). This course is designed and developed so you seamlessly get acquainted with C++ and begin developing applications in no time.
The second course, Building Blocks of Application Development with C++ will introduce you to object-oriented programming (OOP). It includes an in-depth analysis of classes and the associated OOP concepts, which will empower you to implement the concepts of object-oriented programming (OOP) in real life scenarios. It also provides you with the essential know-how to tackle challenges while writing your code. Toward the end of each section, you’ll be introduced to the practical implementation of the concepts.
The third course, High-Performance Applications with C++ will help you master your developing skills with C++. With real-world, practical examples explaining each concept, the course will begin by introducing you to the latest features in C++ 17. It encourages clean code practices in C++ in general and demonstrates the GUI app-development options in C++. By the end of the course, you’ll have an in-depth understanding of the language and its various facets.
About the Authors:
Richard Snyder is currently working as a Senior Software Engineer and writes a diverse amount of computer software applications. Working as an engineer requires the ability to be adaptable to the customer needs to be based on the requirements they give for the computer application to be built. This enables a wide range of technical knowledge to be used from front-end design, middle tier, or back-end development. As a software engineer, Richard uses his years of experience working in technologies such as C/C++/C#, Java, Perl, Python, Groovy on Grails, Ruby on Rails, PHP, HTML, JavaScript, CSS, MongoDB, SQL Server, Oracle, and MySQL to design the best fitting application for the customer’s needs.
Biplab Kumar Modak is an open source software developer. He has 20 years of software development experience in various languages. He is one of the core developers of Code::Blocks—an open source, cross-platform IDE that supports various compilers. He has over 10 years’ experience in open source development with C++. He is also familiar with various popular languages such as C, C#, Visual Basic, VBA, Pascal, Python, and R. He has over 15 years of experience with C++. His grasp and capability in C++ is highly credited.
He is also interested in database-related development, OpenGL, Multi-threaded programming, and web development. His open source development stints have taught him how to deal with multiple compilers on various operating systems. They also helped him develop a better understanding on the subject. When it comes to delivering theory along with practical usage of C++ on various platforms, he considers himself one of the most suitable one to show you the practical side of application development with C++.