成人app

虛基類及虛基類的定義使用

點擊打開在線編譯器,邊學邊練

虛基類

 

成人app在前面學過的繼承過程中,不知道大家有沒有想到這種情況:在多繼承關系中,如果一個派生類的從兩個父類那里繼承過來,并且這兩個父類又恰恰是從一個基類那里繼承而來。那這樣就麻煩了,因為你可能繼承了兩份一樣的成員!

成人app這就出現了所謂二義性問題,下面我們展開學習:

先給大家舉一個能說明這種多繼承的例子吧,筆者我想來想去,想了這么一個例子:以前呢有一個大戶人家,起初呢就兩口子,男主人掌權,保管著大門鑰匙,后來他們有兩個兒子,若干年后長大成人,男主人也老了,就把鑰匙又配了兩把,分別交給他的兩個兒子,交由他們主持家業,又過去好多年,兩個兒子也都成了家,又分別有一男一女,也就是家里的孫子孫女,傳宗接代。所謂人丁興旺吖,后來他們也長大成人,又到了交接鑰匙的時候,古代當然鑰匙要傳給男孩啦,那么這個時候,當然給孫子啦,這個時候呢孫子的爹和他的叔伯(也就是最初主人的倆兒子)都要配一個鑰匙給這個孫子,他手上就有了兩把。

小孫子看著手里兩把鑰匙,說:“一把就夠!兩把…這不浪費嘛!”

 

看完這個故事,大家就好理解多繼承了,故事中最初的男主人,也就是爺爺,就是基類,他的兩個孩子,是兩個派生類,然后其中一個人的孩子,就是那個小孫子,就是最后的派生類,由于他繼承自兩個派生類。且這兩個派生類都有一個共同的成員(鑰匙,因為都繼承同一個基類--爺爺)。最后的小孫子的派生類有兩個重復的成員(鑰匙),就是二義性的根源所在!

 

下面,我們按照這個例子,具體成代碼,大家可以參考:

/**************************************
//Des:C++教程demo
//Author:Huang
//Copyright:hnsaiyang.com
//Date:2017/12/18
**************************************/
#include <iostream>
using namespace std;
class Grandfather
{
public:
    int key;
public:
 
};
class Father1:public Grandfather
{
 
};
class Father2:public Grandfather
{
 
};
class Grandson:public Father1,public Father2
{
 
};
 
int main()
{
 
    Grandson A;
    //A.key=9;
    return 0;
}

成人app代碼就是剛才故事的一個表現,為了方便形容,定義的四個類都很空,重點看繼承關系即可。即Grandson類繼承兩個father類,會有兩個key成員,這個時候如果試圖使用這個key,注意已經聲明為public類型,在主函數中試圖賦值時候,會有“不唯一、模棱兩可”的錯誤提示,即所謂的二義性問題發生。大家可以好好體會。

 

 

 

那么如何規避這個問題呢?即使用虛基類!

所謂虛基類就是在繼承的時候在繼承類型public之前用virtual修飾一下 。比如還是這個例子,只需要父親類在繼承爺爺類的時候多加一個virtual,那么這個時候,派生類和基類就只維護一份一個基類對象。避免多次拷貝,出現歧義。

成人app定義方法即在兩個父親類的派生時增加virtual的聲明:

class Father1:virtual成人app public Grandfather

class Father2:virtual public Grandfather

 

成人app其余不變,大家可以自行上機測試,理解二義性的產生及虛基類的用法。



本文固定URL:http://hnsaiyang.com/course/78

Dotcpp在線編譯      (登錄可減少運行等待時間)