C 基於虛擬的類繼承了更多,孫子的複製建構函式問題 20

發布 科技 2024-04-11
6個回答
  1. 匿名使用者2024-02-07

    首先,我不認為你構建的類系統在實踐中應該有用。 其次,如果你的父親類都有複製建構函式,那麼孫子就不需要爺爺(gs)。 同樣,問題是您同時從兩個父類繼承,並且您可以嘗試單獨繼承。

  2. 匿名使用者2024-02-06

    建議您檢視 C++ Primer Public 宣告的成員函式,每個類都必須有自己的建構函式。 你可以看看這個的基礎知識。 好友只是乙個關係,表明另乙個函式是好友函式。

  3. 匿名使用者2024-02-05

    在 C++ 中,派生類繼承基類的所有成員,但建構函式和析構函式除外。

    好友函式不是乙個類,它只是開啟了類的後門。

    本來類的私有成員不能在類外訪問,但可以通過好友函式繼承。 子類繼承自父類,因此預設情況下,它繼承父類的成員函式和成員變數。

    初始化子類時,首先自動呼叫父類的建構函式。 只有這樣,當您以相反的順序析構子類時,您才會呼叫子類的建構函式。

    構造從類層次結構的最根開始,在每一層中,首先呼叫基類的建構函式,然後呼叫成員物件的建構函式。 銷毀是以與構造完全相反的順序執行的,這是唯一的,否則編譯器將無法自動執行該過程。 它不能被繼承,它是由它們的功能決定的。

  4. 匿名使用者2024-02-04

    這可能是乙個筆誤,如果基類的純虛函式沒有在派生類中定義,那麼派生類本身就變成了乙個抽象類,無法例項化。 如果未宣告,則繼承的函式仍然是純虛函式。 因為它顯式告訴編譯器該函式具有操作名稱,但指向無效位址。

    如果基類的純虛函式在派生類中被重新宣告或定義,則函式的操作指標指向新位址,如果新操作位址未指向 0,則它不再是純虛函式,派生類不再是抽象類。

  5. 匿名使用者2024-02-03

    您的問題是 C++ 中多重繼承機制導致的菱形繼承問題(如下圖所示)的特例。

    1.菱形問題是 R1 中的成員在 C1 中將有兩個副本。

    2.當 a1 和 b1 使用 virtual 繼承 r1 時,菱形問題就解決了。

    3.當 A1 和 B1 分別在 R1 中使用相同的成員函式過載時,問題再次出現:

    C1 中有兩個具有完全相同簽名的函式,乙個來自 A1(void A1::p rint( )b1(void B1::p rint( ) 當 C1 物件呼叫 print 時,它會呼叫 a1::

    列印還是 B1::p rint?這是無法判斷的。

    4.如果 void print( ) 函式也在 C1 中實現,那麼 C1 物件在呼叫 print 時自然會呼叫 C1::print( ) 問題已解決。

    這就是為什麼“不在 C 類中寫入列印會產生上述錯誤”的原因。

  6. 匿名使用者2024-02-02

    這樣你就會有動態繫結,並嘗試將每個print()寫成乙個虛擬函式。

相關回答
6個回答2024-04-11

許多類派生了很多,占用了大量資源。

使用基類的最大好處是它節省了資源,並且可以減少許多冗餘函式對系統資源的占用。 >>>More

6個回答2024-04-11

用於類的繼承。

class derive : virtual public base{};虛擬基類主要解決基類在存在多次繼承時可能被多次繼承的問題,虛擬基類主要為派生類提供乙個基類,如:類 b{}; class d1 : >>>More

20個回答2024-04-11

首先,模式不同。

A類**是在訂閱時直接扣除訂閱費,通常是“前端收費”模式。 前端收費模式是目前投資者最常用的收費模式,而我們平時訂閱的場外收費模式一般是前端收費模式。 >>>More

6個回答2024-04-11

我不知道你是否對記憶體分配一無所知。

根據物件的例項化方式,如果直接例項在沒有新記憶體的情況下在堆疊上分配,則無需擔心類占用的空間在物件生命週期結束時將擁有自己的記憶體。 >>>More