為什麼C 繼承過程中使用訪問說明符和虛函式?

時間 2021-06-01 23:59:59

1樓:

首先,繼承過程中使用訪問說明符主要是為了控制繼承下來的成員的訪問性,比如對類A:

classA;

使用不同的繼承方式,對應的成員訪問性如下:

classB:

publicA;

classC:

protectedA;

classD:

privateA;

至於private 繼承:在 B 類裡面,this 還是可以轉成 A* 的,沒有破壞多型;private 繼承可以使子類 B 繼承父類 A 的 public、protected 成員,但又遮蔽了 B 的子類對這些成員的使用,其他用處可以參見[1]。

2. 其次,使用 virtual 說明符,主要是因為 C++ 裡的零開銷 Zero Overhead 原則,virtual 成員是有虛函式表開銷的,而且在需要動態繫結的場景下才會用到,C++當然是預設首選沒有開銷的。採用模板思路的可以參見靜態繫結的 CRTP(Curiously Recurring Template Pattern)[2]。

[1]isocpp.org faq: Inheritance — What your mother never told you

[2]Wikipedia: Curiously recurring template pattern

C 為什麼允許省略訪問說明符?

邱昊宇 因為 C 起初並沒有 protected,只有 public 和 private。甚至連 private 關鍵字都沒有,那些沒寫 public 的地方就意味著 private 比如成員的訪問說明,繼承基類時的說明。class Stack 這種先寫 private 再寫 public 的風格在...

為什麼 C 中使用虛函式時會影響效率?

C 中使用虛函式不會影響效率。你遇到的場景,都沒到需要考慮流水線 friendly 的程度,先把東西寫出來,別想沒用的。 maple 因為查詢虛函式表的時候會有效率損失,可以通過模板的CRTP技術實現靜態繫結,詳見 C CRTP Curiously Recurring Template Patter...

在使用git的過程中 為什麼要是使用命令列

孫健 官方文件上是這樣解釋的 可以這樣理解 比如你從這個公司跳到另乙個公司,他們使用的也許就不是之前那個公司的客戶端了,那你還要花時間去熟悉新的操作介面,但是你如果會命令列就不需要了,命令列是通用的。當然,如果你只想簡單使用的話GUI是可以的,如果想深入學習的話還是命令列。我也是剛學,這是我自己的理...