Quote: "I think you have that language progression backwards."
I'd argue otherwise. Writing classes in C++ is frustratingly hard because there are way too many things you have to consider:
- Polymorphism? (public virtual destructor or protected non-virtual destructor)
- Inheritance?
- Rule of 3 (C++11 made it rule of 5)
--> Copy constructor? Are there members that require a deep copy?
--> Assignment requires deep copy?
--> Destructor?
--> Move constructor?
--> Move assignment?
- Operator overloads?
- Member functions:
--> Is the function const or not?
--> Do you pass arguments by const reference, reference, rvalue reference, pointer, const pointer, pointer const, or copy?
--> Do you perfect-forward the arguments (std::forward<T>

or move (std::move<T>

the arguments?
--> Is the return value const?
--> Is the function public, protected, or private?
--> Is the function virtual or not?
--> Is the function pure virtual or not?
--> Is the function static or not?
- Exceptions
--> Are your functions nothrow or can exceptions occur?
--> Memory management considerations when an exception occurs (as to not create a memory leak)
- Thread safety
And that's just the main considerations. There are a TON of little things you have to pick up on the way.
What about templates? Would making your class templated be better for a more generic approach?
What about memory management? When do you use smart pointers, when do you allocate on the stack?
When do you forward declare classes, when do you include them?
Not to mention the whole concept of OOP design being a hard concept to grasp.
...
There's just too much to consider. In C, you can forget all of that. There's usually only one way to do it in C: The right way. The only caveat in C is there are no destructors, so you have to make sure you free all of the memory you allocate manually.
I like offending people. People who get offended should be offended. --
Linus Torvalds