Topic Name Description
Course Introduction Page Course Syllabus
Page Course Terms of Use
1.1: History of C++: Origins and Examples Page Tommy Jay's "History of Programming"

Watch this video for a broad overview of the history of computer programming in general.

Page Dr. Tonya Pierce's "History of the C++ Programming Language"

Read this article on the history of C++ programming to see how C++ evolved into what it is today. 

1.2.1: The Linux Way URL wikiHow: "How to Compile a C/C++ Program on Ubuntu Linux"

Read this article on how to compile and run a C++ program. Even though you do not yet understand the C++ language, you can follow the operational steps to compile a program from C++ to machine code.

1.2.2.1: Eclipse CDT Download Page Cave of Programming: "C++Tutorial for Beginners - Installation"

Watch this video to learn how to install the Eclipse CDT.

Page Dr. Tonya Pierce's "Installing Eclipse CDT"

Read this article, which will explain how to install Eclipse CDT. In order to follow these steps, you need to first install Eclipse. You can go to https://www.eclipse.org/downloads/ to download the Eclipse software, which then prepares you for write Java code. However, we want to write code in C++ instead of Java, so we have to take a few additional steps that are different depending on your operating system. Those steps are described in this article.

1.2.2.2: C/C++ Projects Quick Start Tutorial for Eclipse CDT Page Cave of Programming: "C++ Tutorial for Beginners - Hello World"

Watch this video, which shows how to run a simple C++ program. Then try to create, compile, and run your own Hello World program.

1.3.1: Introduction to C++ URL C++: "Introduction"

Read this article about the structure of C++ programming. Then, compile the example in the article and make sure you understand the code in each line.

1.3.2: Variables, Data Types, and Constants URL W3Rescource: "C Variables and Data Types"

Read this article about data types. Although this discusses C, the data types in C++ are exactly the same, except that C does not include a boolean variable. For now, just note that a boolean variable holds a value of either True or False. 

Page Hilze Vonck's "C++ Programming For Beginners: Variables"

Watch this video, which explains how data types are used in C++.

1.3.3: Basic Input and Output Page Hoven Trainings: "Taking User Input"

Watch this (admittedly robotic) video, which provides an explanation of input and output.

URL W3Resource: "C Programming Exercises: Input-Output"

Complete these exercises to check your understanding of input and output. 

1.3.4: Control Structures URL Massachusetts Institute of Technology: John Marrero's "Flow of Control"

Read these lecture notes to learn about control structures in C++ programming. Compile the examples from the notes, and make sure you understand the code in each line. After reading these notes, you should be able to define conditional structures, iteration structures, and jump statements.

1.3.5.1: Scope of Variables in a Function URL Allen B. Downey's "How to Think Like a Computer Scientist"

Read sections 3.3 to 3.10 on pages 23-30, which outline how to use and create functions. Functions are small segments of code that are removed from the normal code flow, and they are called to perform specific actions. After the function executes, control returns back to the normal flow. Within a function, data may be sent and returned to the rest of the program.

1.3.5.2: Arguments Passed by Value and by Reference URL Harding University: Frank McCown's "Passing Arguments by Value and by Reference"

Read this article, which explains how data is passed between functions. When data is passed by value, the actual contents of the variable is passed. However, with some data, you may instead simply want the program to access the data directly from the current location where it is stored. To do this, you pass the value by reference, which tells the function to access the address of the variable. 

URL Google Code: "C++ Class: Problem Set 1"

Take these six quizzes in Problem Set 1. After you finish, check your answers against those provided.

1.4: C++ Reference URL C++ Reference

Explore this page to learn about standard C++ libraries, which are collections of functions, constants, classes, objects, and templates that extend the C++ language. A good programmer will use these when designing a new program.

1.5: C++ Header Files Page Cave of Programming: "C++ Tutorial for Beginners - Headers and Prototypes"

Watch this video, which explains the use of header files. Header files are a separate file that provide the only the header of a method or class (which we will talk about later).

Unit 1 Excercises URL C++ Programming: "Functions - Exercises"

Complete these exercises to check your understanding of functions. If you struggle with any of these exercises, go back and review the earlier portions of this unit.

URL W3Resource: "C Programming Exercises: Functions"

Complete these exercises to double-check your understanding of functions.

2.1: Arithmetic Operators URL W3Resource: "C Operators"

Read this article, which explores C operators. We touched on operators in the previous unit, but now we will cover them in more detail. Even though this is C and not C++, there are no major differences in their operators.

Page IIT Bombay: Ritwik Joshi's "Arithmetic Operators in C and C++"

Watch this video, which discusses the use of arithmetic operators and their real world applications.

2.2.1: Arrays and Strings URL Paul Gribble's "C Programming Boot Camp: Strings"

Read this article, which explores the use of string arrays, which are part of C programming. C did not allow for the use of strings initially, so string arrays are simply a string of characters that are stored in an array. We haven't discussed arrays yet, but this is a great introduction to the use of character strings.

URL Kishori Mundargi's "String Arrays"

This is an additional explanation of character strings, or string arrays, for you to review. Each has a different way of explaining the concepts.

URL Derrick Robinson's "C++ Essentials: String Class"

The String class is an extension that was added to the C++ language that deals with character strings as strings, not as arrays. Read this article to learn how to use classes to call methods and how to manipulate strings to access text data.

URL Whitman College: David Guichard's "Programming in C++"

Read chapter 4 on pages 35-40 to learn about arrays that are not character arrays. This chapter explains how to declare arrays, maneuver them, and use them within classes.

Page Cave of Programming: "C++ Tutorial for Beginners - Multidimensional Arrays"

Watch this video to learn about multidimensional arrays. In the chapter above, you learned about one-dimensional arrays. This video shows how to use multidimensional arrays.

URL C++ Programming: "Strings and Characters"

Read this chapter, which highlights the many different functions that are part of the string class in C++.

URL W3Resource: "C String Exercises"

Complete these exercises to check your understanding of string arrays.

2.2.2: Pointers URL Peter Hosey's "Everything You Need to Know about Pointers in C"

Sometimes, we need to keep track of where we've been or where we need to go. In this case, we use a pointer. Read this article to learn about the use of pointers.

Page Cave of Programming: "C++ Tutorial for Beginners - Pointers, Where C++ Starts to Get Tricky"

Watch this video, which provides excellent examples of using pointers.

URL W3Resource: "C Pointer Exercises"

Complete these exercises to check your understanding of pointers.

2.2.3: Struct, Unions, and Enumerations URL C++ Reference: "Enumeration"

Enumerated types (enums) are essentially a series of int variables that represent more complex data types. Read this article to learn how to use enums.

URL C++ Reference: "Structs"

Structs are a great way to pair multiple variables together and allow them to be passed as a group. Read this article to learn how to use structs.

URL Derrick Robinson's "C++ Essentials: Unions"

Unions are very similar to structs; however, the data shares the same memory spaces, so they cannot be used at the same time. Read this article to learn more about unions.

Unit 2 Exercises URL Google Code: "C++ Problem Sets 2 and 3"

Take the quizzes in Problem Sets 2 and 3. After you finish, check your answers against the provided solutions.

URL Paul Gribble's "C Programming Boot Camp: Complex Data Type Exercises"

Complete exercises 1 and 2 at the bottom of this page to test your knowledge of structs.

3.1: Class Design URL Massachusetts Institute of Technology: Jesse Dunietz's "Object-Oriented Programming (OOP) and Inheritance"

Read this article to learn about the design of classes. Classes are what separate the capabilities of C from that of C++. Classes are the object-oriented aspect of programming.

I like to use the writing utensil example when thinking about classes. If you have a pen, a pencil and a marker, they are all writing utensils. However, when I create a pen, I will use ink; a pencil, I will use lead, and so forth. The color of the pencil or the pen might be different, but its shape and behaviors are the same. This is what object-oriented programming is about. We can define the characteristics of a writing utensil and then create specific instances of each object, based on the unique characteristics of each instance of the object, without having to redefine those characteristics that are common to each. 

Page Pumpkin Programmer: "C++ Tutorial: Classes and Objects"

This video is a great demonstration of the use of classes. You may also wish to refer to these notes that accompany the video.

3.2: Inheritance between Classes Page Pumpkin Programmer: "C++ Tutorial: Inheritance"

Watch this video on inheritance between classes. As with the previous video, be sure to check out the accompanying notes.

URL Usman Malik's "Basics of Inheritance in C++ With Examples"

Read this article, which provides some examples of inheritance.

URL Derrick Robinson's "Intermediate C++: Static Attributes"

Static attributes allow us to store one value for a variable that is consistent through all instances of a class. Read this article to see how this is implemented.

URL Massachusetts Institute of Technology: Tom Lieber's "Introduction to C++: Inheritance Exercises"

Complete this assignment by copying the text into Eclipse. Compile and run the code, and then complete assignment 6. Create, compile and run to check your understanding of this concept. The instructions for both provide details for running in a command line environment. Ignore this information and create the file in your Eclipse environment as you usually do.

3.3: Polymorphism URL Fariba Siddiq's "Encapsulation, Inheritance and Polymorphism In C++"

Read this article, which provides a review of inheritance and a detailed explanation of polymorphism.

Page Pumpkin Programmer: "C++ Tutorial: Polymorphism"

Polymorphism is a concept that isn't easy to grasp. This video and the accompanying notes provide a solid explanation of the concept.

URL C++ Programming: "Operator Overloading"

Operators play an important role in computer programming. What if you could change the behavior of an operator based on the types of its arguments? Read this article to learn about how to do this via operator overloading.

File Software University: "Encapsulation and Polymorphism"

Review these slides, which provide a summary of the concepts you have been learning thus far.

Unit 3 Exercises URL University of Washington: Keunwoo Lee's "Polymorphic Types and Higher-Order Functions"

Read these notes and complete the exercises at the bottom of the page. Check your answers against the provided solutions.

4.1: Templates URL John Hanna's "Templates and Inheritance"

Read this article, which discusses generic programming and the use of templates.

Page Mark Lewis' "Introduction to C++ Templates"

Watch this video to learn more about templates.

4.2: Input/Output with Files Page Cave of Programming: "Reading and Writing Files"

Watch the first video to explore reading input from a file and to see how you can move from simple keyboard input that we have done thus far to inputting from a file. The second video teaches how to store your output into a file rather than the screen.

Though these videos refer to Java, the same principles apply to C++.

URL Paul Gribble's "Input and Output"

Read this article and complete the exercises at the end to test your skills in inputting from and outputting to files.

4.3: Namespaces Page Cave of Programming: "C++ Tutorial for Beginners - Namespaces"

Watch this video. Namespaces in C++ are used to help define the scope and group global classes, functions, and objects into a single group.

4.4: Recursion URL C++: "Functions and Recursion"

Recursion is a simple concept in theory, but can be a confusing in the implementation. Basically, the concept of recursion is that a function calls itself. Read this article to see how this works.

4.5: Exceptions URL C++ Programming: "Exception Handling"

When things go wrong in programming, as they usually do, the last thing you want is for the program to crash or perform some erroneous actions. Using exception handling allows the programmer to control what happens when the unexpected happens. Read this article, which provides a simple explanation of exceptions. 

4.6: Preprocessor Directives URL Shabbir's "Commonly-used C Preprocessor Directives"

These are a list of commonly-used C directives. Although C++ directives are not included in this list, the list is still fairly comprehensive and should give you a good basis to work from.

Unit 4 Exercises URL Ibri College of Applied Sciences: Rudy Prabowo's "Exceptions"

Compile and run exercise 1 to check your understanding of exceptions.

5.1: Memory Management File Massachusetts Institute of Technology: Geza Kovacs' "Memory Management"

Read these lecture notes to learn how to use constructors and descructors appropriately and fix memory leakage.

5.2: Testing and Debugging URL LSST Data Management Development Guide: "Software Unit Test Policy"

Read this section, as well as the one on Coverage Analysis, to learn more about the basics of software testing.

Page Cave of Programming: "Debugging in Eclipse"

Learning to debug is an essential skill for any programming language. Knowing how to search your code for bugs, walk through the program's interpretation, and examine the variable manipulation is an essential part of debugging. Learn how to use the tools built into the Eclipse environment to debug your program. Though this video refers to Java, debugging C++ in Eclipse works similarly.

URL Lars Vogel's "Java Debugging with Eclipse"

Read this explanation of debugging, and use it as you walk through coding and debugging your own programs. This tutorial also refers to Java, but debugging in C++ works in the same way.

6.1: Binary Trees URL Grinnell College: Samuel A. Rebelsky's "Binary Trees"

Read this article and complete the self-checks to assess your understanding of binary trees.

6.2: Coding Drill: List of Binary Trees URL CSE222: "Binary Tree Exercise"

This exercise uses both binary trees and linked lists. It first builds a binary tree to represent text. The nodes of the tree represent the words of the text. In this representation, the alphabetical order of the words is used to determine whether a word is placed using the right branch or the left branch of a node. For example, if the first word begins with an f and the second word begins with an s, then the second word would be stored as the right descendant of the node for the first word. Once the structure of the binary tree is defined, functions can be created that operate on the binary tree structure. To test your code, this example uses Lincoln's Gettysburg Address. Two links in left hand column ("Gettysburg Address" and "Gettysburg, just the words") help you visualize the input data and the resulting binary tree. Note that binary trees are useful for storing data in a manner that facilitates searching that data. For this reason, data is put into the binary tree in a specific order. Note also, that some of the illustrations on this page may use C instead of C++. However, this link is intended to help you come up with a plan for solving the problem; use your knowledge of C++ learned in this course to code the problem. In summary, to solve the problem: 1) understand the requirements of the problem (i.e. what you have to do); 2) design a solution to solve the problem, including a data structure and procedures or functions that operate on the data structure; 3) code your design in C++; and 4) test your code using the "Gettysburg Address" found on the linked page above. Once the binary tree representation of the text is built, the next part of the assessment is to create a linked list that will visit the nodes of the binary tree, i.e. walk the tree in such a way that you visit the nodes in the order in which the test is read, e.g. "Four score and seven years ago, our forefathers..." The binary tree representation stores the words of the text using an alphabetical order. The link list represents the reading order of the words as they appear in the text.

6.3: Containers URL Biplab Kamal's "STL Containers With Examples"

This article explains the different types of contains and how to use them. The use of vectors, lists, maps, queues and stacks are all essential for success in C++.

6.4: Vectors URL Blitzcoder's "Vectors in C++"

Vectors are a fun and different approach to containers. Their dynamic capabilities make them a very useful tool. Read this article to learn more about vectors.

6.5: C++ Glossary Page Dr. Tonya Pierce's "C++ Glossary"

Throughout this course, we used many different terms. Use this glossary as a reference now and in your future career as a programmer. 

Study Guides Page Unit 1 Study Guide: Introduction and Setup
Page Unit 2 Study Guide: Dealing with Data and Compound Types
Page Unit 3 Study Guide: Object-Oriented Programming
Page Unit 4 Study Guide: Advanced Concepts
Page Unit 5 Study Guide: Memory Management and Testing
Page Unit 6 Study Guide: Useful Examples and C++ Glossary
Course Feedback Survey URL Course Feedback Survey