Go find some old C code for doing something like compressing a file. You'll likely find a set of functions where the first or last parameter is always a pointer to some struct or array with the current state of the compression process. If you converted that code to C++, and made it an object, that pointer would be the "this" pointer. The support for objects is just recognizing the common pattern.
Inheritance is similarly recognizing that a lot of code had structs or arrays with multiple function pointers.
The language support just makes those patterns a bit cleaner and less error prone.