How I'd start:
Lesson 1: Pointers don't exist in C++, we
Lesson 2: malloc() doesn't exist in C++
Lesson 3: Templates are awesome.
Lesson 4: Smart pointers are awesome.
Lesson 5: 'Structs' can have constructors, and
Lesson 5.5: Exceptions are awesome!
Lesson 6: 'Structs' can have copy constructors and
assignment operators, but the default ones do
exactly what you'd expect so you shouldn't have
to write them often.
Lesson 7: OK, OK... pointers still exist in C++ but
smart pointers and references make them almost
Lesson 8: ...oh, and if you use raw C pointers you
need to do all this extra donkey work when it
comes to handling exceptions, and write a lot
more of those pesky copy and move constructors
and assignment operators I told you you didn't
need to write.
Example: writing a smart pointer (with C pointers!)
Lesson 9: Implementing a safe, dynamic, exception-safe
array in C++ using templates and C pointers.
Lesson 10: back to sanity, the ease of using <vector>
(or the output of lesson 9) in every day code.
Introduction to the STL, <string>, etc.
Imho teaching inheritance or virtual functions early is also a bad sign. I'd go with public/private access control first (leaving protected), then member functions, then pure virtual member functions and basic inheritance, all the while presenting no hint of Circles and Ellipses, just interfaces.
I tend to bash C and C++ a lot given their unsafe by default nature as a Pascal refugee, but at least C++ can be made safe when the right abstractions are used and I do like it anyway.