c 的繼承關係總結

2021-09-28 12:55:38 字數 1207 閱讀 6545

對於沒有虛函式的情況:

1.子類物件的指標可以直接賦值給父類的指標,但位址值可能會變化,也就是可能編譯器給自動做了轉換,具體可以看下面的例子。這也是最常規的用法。如果是多層繼承,將子類的指標賦值給父類的指標時,該指標位址會自動轉換到該父類的成員的開始位址的地方。

2.父類的物件的指標不能直接賦值給子類的指標,編譯報錯,可以需要強制轉換來通過編譯。這種用法一般用在建立的子類物件賦值給了父類的指標,再將父類的指標賦值給子類的指標。也就是該物件實際是子類的物件。如果是父類的物件,裡面是不包含子類的內容的,所以不能強制轉換為子類的指標,會發生不可預知的錯誤。可以使用dynamic_cast<>來轉換,如果轉換成功,會返回指標,如果轉換失敗,會返回nullptr.

3.繼承類之間位址的賦值可能會引起位址的變化,這個可能是編譯器自動給轉換了,比如如下的例子:

所以,假如乙個物件(*p)有多個父類介面a, b,當要獲得某個父類介面時,可以提供通過(a*)p或者(b*)p來轉化獲得,但不能通過(a*)b來獲得。所以當某個物件有多個父類介面時,可以通過

get_inte***ce(inte***ce_type)函式來獲得對應的介面,實現如下:

void* get_inte***ce(inte***ce_type)

else if (inte***ce_type == b) else

}

class top

;class left : public top

;class right : public top

;class bottom : public left, public right

;void test_cpp_multi_inherit()

int main()

;// std::vectortest_vector(buffer, buffer + 4);

// for(auto &i : test_vector)

test_cpp_multi_inherit();

return 0;

//return a.exec();

}

關於多型和動態繫結,可以參考:

虛函式表的介紹:

每個類擁有乙個虛函式表,每個物件擁有乙個指向虛函式表的指標。

這篇文章介紹了c++類的記憶體結構,可以參考:

C 的繼承關係

建立名為vehicle 車 的基類,它含有製造商的名稱 string型別 發動機缸數 int 型別 以及車主 person型別 然後建立vehicle類的乙個派生類truck 卡車 它具有一些附加屬性,包括載重 double型別 單位 噸 和牽引力 int型別 單位 磅 類應具有合理的建構函式 取值...

C 繼承關係

繼承關係的 演示 class person public person string name,string int age,double weight public void eat double food class student person public void study double...

C 繼承關係

繼承和派生概述 繼承和派生是同乙個過程從不同角的度看 保持已有類的特性而構造新類的過程稱為繼承。在已有類的基礎上新增自己的特性而產生新類的過程稱為派生。被繼承的已有類稱為基類 或父類 派生出的新類稱為派生類 或子類 直接參與派生出某類的基類稱為直接基類。基類的基類甚至更高層的基類稱為間接基類。派生的...