在C++中,类的继承支持多继承,也就是一个类可以继承多个基类,但这样就会产生一些问题,例如:B和C继承了A,而B和C共同派生出了D,如果D想访问B和C继承于A的方法就会产生二义性,所以在访问时,需要指定基类名。
#include<iostream>
class Aclass
{
public:
Aclass()
{
std::cout << "Aclass create\n";
}
void print()
{
std::cout << "from Aclass\n";
}
};
class Bclass:public Aclass
{
public:
Bclass()
{
std::cout << "Bclass create\n";
}
void print()
{
std::cout << "from Bclass\n";
}
};
class Cclass:public Aclass
{
public:
Cclass()
{
std::cout << "Cclass create\n";
}
void print()
{
std::cout << "from Cclass\n";
}
};
class Dclass :public Bclass, public Cclass
{
public:
Dclass()
{
std::cout << "Dclass create\n";
}
};
void main()
{
Dclass D1;
D1.Bclass::print();//需要指定基类名,否则将报错
system("pause");
}
在VS2013运行后得到结果,可以成功访问,但有没有注意到我们创建一个Dclass却创建了两次Aclass,因为D继承了B、C。
在类非常庞大时,会非常的浪费内存。C++提供了虚基类的概念来解决这个问题:
只需在Bclass和Cclass继承Aclass前面加上virtual
class Bclass:virtual public Aclass
class Cclass:virtual public Aclass
这样在创建Dclass时Aclass就只会创建一次。