一、c++類初始化順序:基類,成員變數,建構函式。
二、成員變數初始化順序按照定義順序進行,而不是按照建構函式中初始化列表的順序進行。定義某個變數時,會在初始化列表當中尋找是否為該變數該變數指定了初始值。
三、如果類定義存在虛基類,那麼首先會初始化虛基類,且直接呼叫該虛基類的預設建構函式,即使虛繼承該基類的子類構的造函式的初始化列表當中定義了初始化值,也不會初始化為該值。初始化虛基類後,才會初始化其他非虛繼承的類。如下面這個例子:
類b常規繼承了a,類c虛繼承了a,類d繼承了b、c,執行結果顯示虛繼承的a被直接呼叫預設,而不是設定預設引數為2時的結果。初始化完虛基類後,繼續將其他類初始化完畢。
虛繼承中,只有當類b、c當中的a都為虛繼承時,類a才會只初始化一次,上面的情況下,a仍然初始化了兩次。
四、c++與c中不同的地方
1. 對於帶空參數列的函式,如int func(),c語言中表示為「乙個可帶任意數目,任意型別的函式」,c++中表示「不帶引數的函式」
2.c++仍然可以用從c繼承下來的帶有「.h」副檔名的標頭檔案,也可以使用c++風格的寫法,如「#include 」可寫為"#include ",這樣就為讀者提供了乙個區分標誌,說明是c庫還是c++庫。
3.名字空間和包含標頭檔案的方法之間存在相互關係。現在標頭檔案都標準化了(不帶.h),過去典型包含標頭檔案方式是帶上.h,那時名字空間不是語言一部分。由於對已經存在的**要向後相容,如果給出
#include
相當於#include
using namespace std;
使用不帶.h的標準方式包含標頭檔案,就必須加入using命令。
4.定義變數c只能在作用域開頭定義,c++可以在作用域任意地方定義,即c++可以在要使用變數時才去定義,而不需要將定義寫在最前面。
五、人們經常會把標準c++庫的「容器」與「演算法」和被稱為stl的東西混淆。stl(標準模版類庫)是2023年alex stepanov在加州san diego的會議上把他的c++庫提交給c++標準委員會時使用的名稱,這個名稱一直沿用下來。c++標準委員會對stl作了大量修改,將他整合進標準c++類庫。sgi的stl與標準c++庫在許多細節上是不同的。雖然人們常常產生誤解,但實際上c++標準是不包括stl。標準c++庫的「容器」和「演算法」與sgi的stl有相同**,因此容易引起誤會。正確的稱呼c++中vector、string的方法是「標準c++庫」或「標準容器庫」。
六、類一旦有了建構函式,建立類物件時就必須呼叫該建構函式。也就是說,如果乙個類沒有預設建構函式但有必須傳遞引數的建構函式,而建立這個類的物件時沒有指定建構函式的引數值時,是無法通過編譯器編譯的,因為編譯器會認為與構造函式引數列表不匹配。
七、類沒有任何建構函式時編譯器會自動生成乙個建構函式,但生成函式的執行效果如何是無法保證的,所以對於任何乙個類最好的方法是建立乙個預設的建構函式。
JAVA 繼承需要注意的細節
1 子類的構造過程中 必須 呼叫基類的構造方法 原因 可以這樣理解,每個子類都有 super 屬性 而該屬性指向的是父類物件 在例項化子類物件時 子類的構造方法會預設的去呼叫一次父類的構造方法 目的是為了生成乙個父類物件 並讓 super 指向該物件 這種說法只是我自己理解的,雖然不清楚是為什麼,但...
程式設計中需要注意的細節
雖然,這些使用方法看似差別不大,在現在的cpu執行期起來幾乎上可以忽略不計,但是,我們想一下現在軟體,每乙個都是那麼的龐大,乙個小專案都是幾萬行 乙個函式中你消耗一點,那麼多函式是很大的效能消耗的。舉乙個不恰當的例子,下面的例子是我在虛擬機器中執行,其中也會有機器效能不好的原因,但是我覺得這樣才會將...
需要注意的問題
決策樹id3和c4.5的差別?各自優點?boost演算法 cart 回歸樹用平方誤差最小化準則,分類樹用基尼指數最小化準則 gbdt與隨機森林演算法的原理以及區別。優化演算法中常遇到的kkt條件?作用是?最近鄰演算法knn 分類與回歸 l1和l2函式?l1和l2正則項的比較,如何解決 l1 求導困難...