Virtual inheritance to solve diamond problem

  A  
/ \
B C
\ /
D
A   A  
| |
B C
\ /
D
struct Animal {
virtual ~Animal() { }
virtual void eat();
};

struct Mammal : Animal {
virtual void breathe();
};

struct WingedAnimal : Animal {
virtual void flap();
};

// A bat is a winged mammal
struct Bat : Mammal, WingedAnimal {
};

Bat bat;
struct Animal {
virtual ~Animal() { }
virtual void eat();
};

// Two classes virtually inheriting Animal:
struct Mammal : virtual Animal {
virtual void breathe();
};

struct WingedAnimal : virtual Animal {
virtual void flap();
};

// A bat is still a winged mammal
struct Bat : Mammal, WingedAnimal {
};

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store