C++多继承与虚继承
目录
多继承与虚继承以及存在的问题
虚继承
有了多继承,虚继承才会有意义
如果有个菱形结构的继承,爷爷类为A,然后B,C是A的派生类,最后D是B和C的派生类,
如果在A中有一个成员变量a,D去调用就会出现访问不明确,
虚继承就可以解决访问不明确的这种问题
如果这样继承B,C虚继承了A,virtual public,然后D继承B,C
通常的理解方式!
在虚继承之后,A里面的成员变量a是不复制给B和C的,而是只给了B和C使用权,所以D也只有使用权
多继承,虚继承不建议用,结构复杂,内存开销比较大。
用菱形的结构简单的就可以了,可读性比较好
这里的A叫做虚基类
例子
采用多继承,会出现访问不明确的问题。
如下代码:
#include <iostream>
using namespace std;
class A{
public:
A(){
m_valueA = 0;
}
int m_valueA;
void print(){
cout << "class A print() called!" << endl;
}
};
class B: public A{
};
class C: public A{
};
class D: public B, public C{
};
int main(){
D d;
cout << d.m_valueA << endl;
getchar();
return 0;
}
运行报错截图如下:
此时采用虚继承就能很好的解决这个问题:
代码如下:
#include <iostream>
using namespace std;
class A{
public:
A(){
m_valueA = 0;
}
int m_valueA;
void print(){
cout << "class A print() called!" << endl;
}
};
class B: virtual public A{
};
class C: virtual public A{
};
class D: public B, public C{
};
int main(){
D d;
cout << d.m_valueA << endl;
getchar();
return 0;
}
运行截图如下: