關於建構函式繼承的兩點注意

2021-05-23 00:32:46 字數 1083 閱讀 1561

1,如果基類沒有提供預設建構函式,派生類必須使用base顯式呼叫基建構函式。

這是從msdn上看到的一句話(參考http://msdn.microsoft.com/zh-cn/library/ms173115(v=vs.80).aspx)

一開始還真沒太引起過注意,最近才發現這個問題,例項如下

class b

class bb : b

public bb(int i)

class bbb : bb

public bbb(int i)

這個時候編譯器在bbb類中報錯說 bb類中沒有不帶引數的建構函式

而bb類之所以沒報同樣的錯誤,是因為b類中會自動新增不帶引數的建構函式,

解決辦法,當然是在bb類中加上預設的建構函式了,可實際專案中又不想宣告不帶引數的例項(禁用new bbb())

所以只能在bbb類中使用 base 顯式呼叫基建構函式。

改造如下

class bbb : bb

public bbb(int i)

: base(i)

問題解決。

2.關於建構函式使用 base的執行順序及結果

例項如下

class a 

public a(int i)

index = i + 1;

console.writeline("a:" + index.tostring());

public int index

class aa : a

public aa(int i)

: base(i)

index = i;

console.writeline("aa:" + index.tostring());

呼叫:aa aa = new aa(10);

console.writeline(aa.index.tostring());

結果:a:11

aa:10

由此可見,首先執行了父類a的建構函式,

然後執行aa的建構函式,

並且aa的建構函式覆蓋了a建構函式,所以aa.index結果為10

C 培訓2019 10 24 關於繼承的兩點問題

一 若貓繼承自動物,則貓會自動複製動物除建構子之外的所有方法。二 如果把狗放進動物的盒子裡 animal animal new dog 那麼讓這個 動物 叫的話,就會是 汪汪 個人理解 因為上述第一點所述,狗 的物件其實是擁有 狗叫 和 動物叫 兩個方法的,其中 狗叫 是overload 動物叫 的...

買記憶體,注意這兩點

由於電腦出廠時的記憶體比較小,一般的是4g,現在有好多童鞋的記憶體已經不能滿足他了,電腦工作的時候有一點的卡頓,那麼為了讓自己的電腦更加流暢,就給他裝上乙個記憶體條吧,來拓展一下他的記憶體,讓他更好的為你服務!但是現在記憶體條的 還是居高不下,為了讓自己舒服點,該出手時就出手 1.匹配正確的記憶體型...

使用count 要注意的兩點

一 null和false的不同 result count null result 0 result count false result 1 二 是否遞迴計算 food array fruits array orange banana veggie array carrot collard pea ...