CATALOG DESCRIPTION: Object-oriented programming, classes and data hiding, dynamic object construction and destruction, derived classes and inheritance, virtual functions; file processing; introduction to UNIX; testing and test generation.



  1. H. M. Deitel and P. J. Deitel, C++: How to Program , Prentice Hall, 5 th edition, 2005;
  2. Robbins, Linux—Programming by Example: The Fundamentals , Prentice Hall, 2004


COURSE GOALS: To teach object-oriented programming with applications to computer engineering. To teach the concepts of classes, inheritance, and libraries. To teach issues related to good programming, reuse, testing/test generation, and problem solving in general. To introduce UNIX systems and developing/debugging C/C++ programs on UNIX systems.

PREREQUISITES: EECS 110 or knowledge of any programming language



Week 1 : Introduction to software engineering. Basic data types, variables, computer arithmetic, expressions, parentheses. Basic I/O – cout, cin. Flow of control – sequential, test-and-branch, iteration. Boolean expressions. Software engineering revisited - testing and correctness, comments, assert().

Lab demonstrations: Logging into Wilkinson lab, make files, the GCC/C++

Compiler and separate compilation

Week 2 : Arrays, pointers, and strings. Functions: call by value and call by reference, references vs. pointers. Function overloading

Lab demonstrations: The GDB debugger (including –Wall, -Werror, etc.),

the Emacs editor

Week 3 : Introduction to classes. Structures and classes, data hiding and encapsulation. Public and private members, constructors, unions. Interface vs. implementation.

Lab demonstrations: Unix shell, Unix file system and directories

Week 4 : Classes and Abstract Data Types (ADTs), interface and implementation files.

Lab demonstrations: More Unix directories, security models (users, groups, permissions)

Week 5 : Class destructors and copy constructors, the = operator, deep versus shallow copies, C++ operator overloading.

Lab demonstrations: Good programming practice--assert and use of utility functions (perror)

Week 6 : C++ operator overloading (cin, cout and arithmetic operators). Inheritance and derived classes, is-a hierarchies and composition of classes. Virtual functions and polymorphism.

Week 7 : Virtual functions and polymorphism. Linked list processing: stacks and queues, trees and recursion..

Week 8 : Template functions and classes. Standard Template Library: iterators and containers, strings revisited. Exception-handling basics

Week 9 : Advanced Topics: C versus C++: exception-handling basics, static and dynamic type casting, C-style I/O. UNIX style programming – argv/argc. The Unix file system

Week 10 : Unix : file redirection and piping, process management


LABORATORY: Programming assignments will be done on UNIX systems.


Programming and Written Homework Assignments - 30%

Midterm - 35%

Final - 35%

COURSE OBJECTIVES: When a student completes this course, s/he should be able to:

  • Formulate a solution, in a systematic way, to an open ended problem in engineering and science
  • Design efficient algorithms for solving a problem.
  • Translate the solution into a program (e.g., C++), making use of concepts in object-oriented programming to facilitate the translation process.
  • Effectively test and evaluate the program and interpret the final result. Effectively modify the final result if necessary.
  • Use the UNIX system and UNIX tools.

ABET CONTENT CATEGORY: 100% Engineering (Design component).