Multiple Inheritance and virtual inheritance
Unlike other languages, C++ allows multiple inheritance.
Unfortunately multiple inheritance leads to lots of problems: If a variable or method is declared in more than one superclass.
Therefore we wil not do discuss many details. If you're interested, read pages 163 - 166 of C++ in a nutshell.
Here are some guidelines to make multiple inheritance feasable. This is what Java and Delphi do.
A class may inherit from one "regular" superclass.
All other superclass must be pure abstract (interfaces) which means: Only pure virtual functions (no implementations) and no attributes (variables).
Why would you need multiple inheritance? Everytime something is multiple things at one time. E.g. a "FlyingCar" could be a subclass of "Car" and of "Airplane".
Example:
class Car { public: virtual void driveTo(Location *l)=0; }; class Airplane { public: virtual void flyTo(Location *l)=0; }; class FlyingCar : public Car, public Airplane { public: virtual void flyTo(Location *l); virtual void driveTo(Location *l); };
Now suddently getter methods make much more sense! A superclass can define virtual getter and setter methods without actually defining the attribute!
Example:
class Airplane { public: virtual int getHeightAboveGround()=0; virtual void setHeightAboveGround(int h)=0; };
//Practice: Define the following classes:
Notes on virtual inheritance