C++ 多重继承

  大多数应用程序使用单个基类的公用继承,但是在某些情况下,单继承是不够的,必须使用多继承,当然多继承也会带来很多的麻烦,下面列出了多继承的一些要点和注意事项。

  1.基类的构造函数与按照派生类列表中出现的次序调用,析构函数的调用次序总是和构造函数的调用次序相反。

  2.多重继承的情况下,遇到二义性的可能将会更大,编译器不会试图根据派生类转换区别基类间的转换,转换成每个基类都一样好,有如下代码:

class ZooAnimal
{

};

class Bear : public ZooAnimal
{

};

class Endangered
{

};

class Panda : public Bear, public Endangered
{

};

如果有print函数的两个重载版本:

void print(const Bear&);

void print(const Endangered&);

这个调用将会出错,编译器将指出改掉用有二义性。

  3.假定在类的多个基类中定义了相同的成员,将会导致二义性,如果定义了同名的成员函数,即使是函数参数不同,也会导致二义性,代码如下:

class ZooAnimal
{

};

class Bear : public ZooAnimal
{
public:
void print(int x){cout<<"print"<<endl;}

};

class Endangered
{
public:
void print(){cout<<"print"<<endl;};
};

class Panda : public Bear, public Endangered
{
};

如果在ZooAnimal中定义了print 而Bear中没有定义,同样会出现二义性。避免二义性的最好方法就是指定函数的作用域,比如:

Bear::print(x);

原文地址:https://www.cnblogs.com/lzmfywz/p/2991875.html