多重继承

除了单一继承:

class A {};
class B : public A {};

你还可以拥有多个继承:

class A {};
class B {};
class C : public A, public B {};

C 现在将同时继承 AB

注意:如果在多个继承的 classs 或 structs 中使用相同的名称,这可能会导致歧义。小心!

多重继承中的歧义

在某些情况下,多重继承可能会有所帮助,但有时在使用多重继承时遇到奇怪的问题。

例如:两个基类具有相同名称的函数,在派生类中不会被覆盖,如果使用派生类的对象编写代码来访问该函数,编译器会显示错误,因为它无法确定要调用的函数。这是多继承中这种歧义的代码。

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( )  
}

但是,使用范围解析函数可以解决此问题,以指定要对 base1 或 base2 进行分类的函数:

int main()
{
    obj.base1::function( );  // Function of class base1 is called. 
    obj.base2::function( );  // Function of class base2 is called.
}