條款33:避免遮掩繼承而來的名稱
對於繼承的父類中的函式,如果在子類中有同名的函式,則父類中的同名函式都將被隱藏,例如:的或者virtual和no-virtual函式都是有同樣的效果的!為了能夠防止父類中的同名函式被隱藏我們可以在子類中用using來引入父類class base;
class derived : public base;
derived d;
int x;
d.mf1();
d.mf1(x) //錯誤,父類中的mf1同名的函式被子類中的函式名隱藏
d.mf2(); //呼叫父類的mf2函式
d.mf3()
d.mf3(x)//錯誤, 父類中的mf3同名的函式被子類中的函式名隱藏
d.mf4();
在上面的例子中,base類中的mf3、mf4和mf1中的所有同名字的函式都被子類中的函式給隱藏了,即使是引數型別不同
的成員函式如:
父類的所有函式在子類中都是相同的!在子類中主動的呼叫父類的成員函式我們可以通過base::mf1來實現!class derived : public base;
在public繼承的體系中,子類不應該要隱藏父類的成員函式,因為這樣就與public繼承的原理要背馳,public繼承就是保證
請記住:
Effective C 讀書筆記3
條款8 別讓異常逃離析構函式 c 並不禁止析構函式吐出異常,但不鼓勵這樣做。但如果你的析構函式必須執行乙個動作,而該動作可能會在失敗時丟擲異常,該怎麼辦?兩個辦法解決 一是 如果丟擲異常程式就結束,通常通過呼叫abort函式完成 dbconn dbconn catch 如果程式遭遇乙個於析構期間發生...
effective C 讀書筆記 3
1 p18 頁 經過我的實驗 void f1 const a a 和void f2 a const a 是不同的!莫非書上有錯?2 stl迭代器 天生就是 t const ptr 如果需要乙個 const t ptr 則需要的是 const iterator 3 這個表要記一下子 3 non con...
《effective C 》讀書筆記
1,c 關鍵字explicit c 中,乙個引數的 建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是個 構造器,2 是個預設且隱含的型別轉換操作符 所以,有時候在我們寫下如 aaa 這樣的 且恰好 的型別正好是aaa單引數構造器的引數型別,這時候 編譯器就自動呼...