#include
using
namespace std;
class
base1
int m_i;};
class
base2
typedef
int m_i;};
class
derived
:public base1,
public base2
;int
main()
1> 虛繼承作用
通過虛繼承可以讓公共基類子物件在末端子類物件中例項唯一,並可以為所有的中間類共享,在末端子類訪問公共基類成員,即便沿著不同的繼承路徑,所訪問到的基類成員也是一致的
虛繼承是解決c++多重繼承問題的一種手段,從不同途徑繼承來的同一基類,會在子類中存在多份拷貝。這將存在兩個問題:其一,浪費儲存空間;第二,存在二義性問題,通常可以將派生類物件的位址賦值給基類物件,實現的具體方式是,將基類指標指向繼承類(繼承類有基類的拷貝)中的基類物件的位址,但是多重繼承可能存在乙個基類的多份拷貝,這就出現了二義性。
2>虛繼承語法
.在繼承表中使用virtual
關鍵字修飾(定義中間類時)
.位於繼承鏈的末端子類負責構造公共基類子物件
3>虛繼承實現的原理
虛繼承底層實現原理與編譯器相關,一般通過虛基類指標和虛基類表實現,每個虛繼承的子類都有乙個虛基類指標(占用乙個指標的儲存空間,4位元組)和虛基類表(不占用類物件的儲存空間)(需要強調的是,虛基類依舊會在子類裡面存在拷貝,只是僅僅最多存在乙份而已,並不是不在子類裡面了);當虛繼承的子類被當做父類繼承時,虛基類指標也會被繼承。
虛表指標->
-/虛基類表(儲存了當前中間類相對於公共基類的偏移量)
-\虛函式表(函式指標陣列,每個函式指標儲存了虛函式在**段的位置)
#include
using
namespace std;
class
aprotected
:int m_data;};
classb:
virtual
public a
void
set(
int data)};
classc:
virtual
public a
intget()
};classd:
public b,
public c };
intmain()
/home/panda/workspace/cpp/cmake-build-debug/cpp
100200
程序已結束,退出** 0
C 從入門到放棄之 C 繼承基本語法
class struct 類名 繼承方式 基類,繼承方式 基類,類名 void 返回值型別 函式名 形參表 常屬性 異常說明 訪問控制限定符 資料型別 變數名 成員變數 include using namespace std class human void eat const string foo...
C 從入門到放棄之 C 函式
內聯函式 inline 函式是否構成過載關係與函式的返回值型別無關 通過函式指標呼叫過載關係的函式,由函式指標的型別決定匹配過載的版本 呼叫過載關係的函式時,編譯器會根據形參和實參的匹配程度,選擇最優的匹配版本,一般的匹配規則 完全匹配 常量轉換 公升級轉換 降級轉換 省略號轉換 在操作符過載函式 ...
Web安全從入門到「放棄」之pikachu環境部署
1.首先進行本地伺服器的搭建 先到官方 安裝xampp 安裝完後的軟體介面 如果開啟apache和mysql顯示錯誤的話,可以開啟日誌檢視錯誤資訊,點選logs開啟error.log日誌檢視。很大情況是埠錯誤,這時候可以修改埠,關於這個問題,網上有很多教程,這裡就不講解了 解壓pikachu.zip...