c++基礎複習——菱形繼承以及解決方法

#include <iostream>
using namespace std;

class Animal
{
public:
	int m_age;
};

//利用虛繼承可以解決菱形繼承
//animal稱爲虛基類
class Sheep :virtual public Animal
{

};

class Tuo :virtual public Animal
{

};

class SheepTuo :public Sheep, public Tuo
{

};

void test1()
{
	SheepTuo st;

	//兩個父類有相同的數據,需要加作用域加以區分
	st.Sheep::m_age = 18;
	st.Tuo::m_age = 28;

	//數據只需要一份,菱形繼承造成了兩份數據,浪費了資源
	//vbptr(虛基類指針)指向vbtable(虛基類表),表中記錄偏移量,繼承vbptr之後,通過vbptr指向detable,查詢table中的偏移量,可以查到數據,解決了數據重複的問題
	cout << st.m_age << endl;
}

int main()
{
	test1();

	return 0;
}

一.菱形繼承

  • 羊繼承了動物的數據,駝也繼承了動物的數據,當羊駝使用數據的時候,就會產生二義性(可以通過加作用域解決)
  • 羊駝繼承自動物的數據繼承了兩份,這將會造成資源浪費

原來動物的數據會被繼承兩份,現在用虛繼承,有了虛基類指針,指向虛基類表,就可以只有一份數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章