文章目錄
- 一、基本概念
- 二、程序舉例
- 1. 虛繼承
- 2. 內在邏輯
一、基本概念
菱形繼承是指存在兩個子類繼承自同一個基類,同時有子類繼承這兩個子類。
二、程序舉例
1. 虛繼承
使用虛繼承可以解決菱形繼承資源浪費的問題,因為有兩個子類繼承基類,子類對象調用兩個父類作用域下屬性時,會發生資源浪費,兩個子類分別調用基類的構造函數,生成兩份基類所含有的數據成員。用虛繼承,只調用一次構造函數和析構,所以避免資源浪費。
#include <iostream>using namespace std;class Person
{
public:int Age;
};class Gril : virtual public Person
{};class Boy : virtual public Person
{};class Child : public Gril, public Boy
{};int main()
{Child A;A.Gril::Age = 5;A.Boy::Age = 10;cout << A.Gril::Age << endl;cout << A.Boy::Age << endl;}
10
10
2. 內在邏輯
可以使用VS的開發者工具解釋其內在邏輯。
虛繼承時,虛基類指針vbptr指向虛基類表vbtable,虛基類表中存放的就是數據相對于虛基類指針的偏移,然后根據偏移找到數據。