Struct Inheritance in C

jimit picture jimit · Jul 11, 2009 · Viewed 47.2k times · Source

Can I inherit a structure in C? If yes, how?

Answer

Daniel Earwicker picture Daniel Earwicker · Jul 11, 2009

The closest you can get is the fairly common idiom:

typedef struct
{
    // base members

} Base;

typedef struct
{
    Base base;

    // derived members

} Derived;

As Derived starts with a copy of Base, you can do this:

Base *b = (Base *)d;

Where d is an instance of Derived. So they are kind of polymorphic. But having virtual methods is another challenge - to do that, you'd need to have the equivalent of a vtable pointer in Base, containing function pointers to functions that accept Base as their first argument (which you could name this).

By which point, you may as well use C++!