On conclusion of this course, students will: ~~1. Acquire good programming habits and be proficient in C++ programming using object oriented techniques, ~~2. Recognize the importance of, and select appropriate application-specific data structures in programs, ~~3. Be able to write modular programs using the mechanisms of class inheritance and composition to implement various user-defined data structures in C++ using low-level pointer constructs. ~~4. Learn the techniques of code-reuse, ~~5. Analyze the asymptotic time complexity of an algorithm and understand its impact on execution time, ~~6. And thus, select/design computationally efficient algorithms that result in computationally efficient programs.