说说C++多重继承
作者:网络转载 发布时间:[ 2015/3/31 13:56:42 ] 推荐标签:C++ 继承 软件开发
二、转换与多个基类
单个基类情况下,派生类的指针或引用可自动转换为基类的指针或引用。对于多重继承,派生类的指针或引用可以转换为其任意基类的指针或引用。
注意:在多重继承情况下,遇到二义性转换的可能性更大。编译器不会试图根据派生类转换来区别基类间的转换,转换到每个基类都一样好。例如:
void print(const Bear&);
void print(const Endangered&);
通过Panda对象调用print时,会导致一个编译时错误。
1、基于指针或引用类型的查找
与单继承一样,用基类的指针或引用只能访问基类中定义(或继承)的成员,不能访问派生类中引入的成员。当一个类派生于多个基类的时候,那些基类之间没有隐含的关系,不允许使用一个基类的指针访问其他基类的成员。例如:
class ZooAnimal
{
public:
virtual void print(){}
virtual ~ZooAnimal(){}
};
class Bear : public ZooAnimal
{
public:
virtual void print()
{
cout << "I am Bear" << endl;
}
virtual void toes(){}
};
class Endangered
{
public:
virtual void print(){}
virtual void highlight()
{
cout << "I am Endangered.highlight" << endl;
}
virtual ~Endangered(){}
};
class Panda : public Bear, public Endangered
{
public:
virtual void print()
{
cout << "I am Panda" << endl;
}
virtual void highlight()
{
cout << "I am Panda.highlight" << endl;
}
virtual void toes(){}
virtual void cuddle(){}
virtual ~Panda()
{
cout << "Goodby Panda" << endl;
}
};
当有如下调用发生时:
int main()
{
Bear *pb = new Panda();
pb->print(); //ok: Panda::print
// pb->cuddle(); //error: not part of Bear interface
// pb->highlight(); //error: not part of Bear interface
delete pb; //Panda::~Panda
Endangered *pe = new Panda();
pe->print(); //ok: Panda::print
// pe->toes(); //error: not part of Endangered interface
// pe->cuddle(); //error: not part of Endangered interface
pe->highlight(); //ok: Panda::highlight
delete pe; //Panda::~Panda
return 0;
}
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com