Description

This course examines how to program in C++ in a robust and safe manner. C++ is an unsafe programming language, meaning each programmer — not the programming language — must enforce basic invariants concerning abstractions and modularity. The purpose of this course is to introduce students to the programming in C++ and its pitfalls; how standard libraries try to eliminate these pitfalls and fail; and what kind of tools programmers use to overcome the pitfalls. The course reviews basics, including scoping, typing, and primitive data structures. Discusses data types (primitive, array, structure, class, string); addressing/parameter mechanisms (value, pointer, reference); stacks; queues; linked lists; binary trees; hash tables; and the design of classes and class inheritance, emphasizing single inheritance. Considers the instantiation of objects, the trade-offs of stack vs. heap allocation, and the design of constructors and destructors. Emphasizes the need for a strategy for dynamic memory management. Addresses function and operator overloading; templates, the Standard Template Library (STL), and the STL components (containers, generic algorithms, iterators, adaptors, allocators, function objects); streams; exception handling; and system calls for processes and threads.

Learning Objectives

Textbooks

There is no required textbook for this course. But the following books closely follow the weekly course schedule: We also use material from the following textbooks extensively during our lectures: The following reference books can also be used for some extra reading: Note: NU students have free online access to most or all O'Reilly books via the NU Library. Go to https://library.northeastern.edu/research/resources/items/oreilly-for-higher-education-previously-safari-books-online and follow the links. If asked to select your institution, select "None of the Above", which is the first item on the menu, and log in with your northeastern.edu email address. This will get you full access, and will also keep track of your favorites, etc.

List of Topics

The following (tentative) schedule is currently planned:

The weekly outline / schedule can also be found on Canvas.

Grading

My general philosophy is: Your learn programming by doing programming! To that effect, you will have the opportunity to demonstrate your knowledge of the course materials through regular coding work. Some of the work may have to be completed in groups.

The final grade for this course will be calculated as a weighted average of scores for practice activities, weekly homeworks, and final project, to be computed as follows:

Grading Scale

A
[94 - 100]
A-
[90 - 94)
(that is, 90 ≤ your average < 94, etc.)
B+
[88 - 90)
B
[84 - 88)
B-
[80 - 84)
C+
[78 - 80)
C
[74 - 78)
C-
[70 - 74)
D+
[68 - 70)
D
[64 - 68)
D-
[60 - 64)
F
[0 - 60)
 

Scores will not be rounded; however, a curve may be introduced at the Instructor's discretion.

Attendance

Instructor Meeting

Late Work and Makeup Policy

Final Project