#include<iostream>
using namespace std;
class Animal
{
public:
Animal()
{
cout<<"Animal constructor"<<endl;
}
int age;
};
class Mammal: public Animal
{
};
class Bird: public Animal
{
};
class Reptile: public Animal
{
};
class Platypus:public Mammal,public Bird, public Reptile
{
public:
Platypus()
{
cout<<"Platypus constructor"<<endl;
}
};
int main(int argc,char** argv){
Platypus p;
system("pause");
return 1;
}
上述有3个派生类,都继承于Animal。 第四个派生类继承于上面三个派生类。 当创建一个孙子类时,会先自动创建3个父类对象,然后在创建自己类的对象。 这可能会导致内存的无效浪费,更有甚者可以修改其age值,通过不同的父类对象
p.Mammal::Animal::age = 10;
p.Bird::Animal::age = 10;
p.Reptile::Animal::age = 20;
为了解决这个问题,可以使用虚继承
#include<iostream>
using namespace std;
class Animal
{
public:
Animal()
{
cout<<"Animal constructor"<<endl;
}
int age;
};
class Mammal: public virtual Animal
{
};
class Bird: public virtual Animal
{
};
class Reptile: public virtual Animal
{
};
class Platypus:public Mammal,public Bird, public Reptile
{
public:
Platypus()
{
cout<<"Platypus constructor"<<endl;
}
};
int main(int argc,char** argv){
Platypus p;
system("pause");
return 1;
}
基类实例化对象的个数限定为一个
|