Structures, classes, operator overload, encapsulation, testing and separate compilation, project-based learning