If you want to fully "emulate" C++ in C, you primarily need to emulate polymorphism; overloading, friends, etc. are "syntactic sugar" which provides encapsulation, etc., which is important, but has no functional impact (Operator overloading is a problem, though).
Polymorphism with virtual methods you can emulate by having a jump table (vtable) in your struct. Each class with virtual methods or a constructor needs a vtable to determine which functions to call. Also, a "super" reference to the parent's vtable is helpful.
So a very simple example with a "parent" and "child" class would be like this:
Originally C++ was implemented on many platforms using a preprocessor called C Front. It converted the C++ to C code and then fed the result to a C compiler. If you can find a working example of C front then you're home.
I read some time ago that Bjorn Stroustrup denied that C front was ever used extensively. I was at Bell Labs in 1996 and we did quite a large project on HP-UX using C front to convert C++ code we wrote to C and then object code of course.