多重继承
除了单一继承:
class A {};
class B : public A {};
你还可以拥有多个继承:
class A {};
class B {};
class C : public A, public B {};
C
现在将同时继承 A
和 B
。
注意:如果在多个继承的 class
s 或 struct
s 中使用相同的名称,这可能会导致歧义。小心!
多重继承中的歧义
在某些情况下,多重继承可能会有所帮助,但有时在使用多重继承时遇到奇怪的问题。
例如:两个基类具有相同名称的函数,在派生类中不会被覆盖,如果使用派生类的对象编写代码来访问该函数,编译器会显示错误,因为它无法确定要调用的函数。这是多继承中这种歧义的代码。
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.
}