Aside from single inheritance:
class A {};
class B : public A {};
You can also have multiple inheritance:
class A {};
class B {};
class C : public A, public B {};
C
will now have inherit from A
and B
at the same time.
Note: this can lead to ambiguity if the same names are used in multiple inherited class
s or struct
s. Be careful!
Ambiguity in Multiple Inheritance
Multiple inheritance may be helpful in certain cases but, sometimes odd sort of problem encounters while using multiple inheritance.
For example: Two base classes have functions with same name which is not overridden in derived class and if you write code to access that function using object of derived class, compiler shows error because, it cannot determine which function to call. Here is a code for this type of ambiguity in multiple inheritance.
class base1
{
public:
void funtion( )
{ //code for base1 function }
};
class base2
{
void function( )
{ // code for base2 function }
};
class derived : public base1, public base2
{
};
int main()
{
derived obj;
// Error because compiler can't figure out which function to call
//either function( ) of base1 or base2 .
obj.function( )
}
But, this problem can be solved using scope resolution function to specify which function to class either base1 or base2:
int main()
{
obj.base1::function( ); // Function of class base1 is called.
obj.base2::function( ); // Function of class base2 is called.
}