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;
}

运行报错截图如下:

C++多继承与虚继承

 

此时采用虚继承就能很好的解决这个问题:

代码如下:

#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;
}

运行截图如下:

C++多继承与虚继承