effective C++筆記之條款19:分清成員函數,非成員函數和友元函數


這是很重要的一個條款。

l        成員函數和非成員函數最大的區別在於成員函數可以是虛擬的而非成員函數不行。所以,如果有個函數必須進行動態綁定,而虛擬函數必定是某個類的成員函數。但如果函數不必是虛擬的,情況就稍微複雜一點。

l        只要能避免使用友元函數就要避免,因爲,和現實生活中差不多,友元(朋友)帶來的麻煩往往比它(他/她)對你的幫助多。

 

l        結論如下:

1.假設f是正想正確聲明的函數,C是和它相關的類:

2.虛函數必須是成員函數。如果f必須是虛函數,就讓它成爲C的成員函數。

3.operator<<和operator>>決不能是成員函數(不符合自然的調用語法)。如果f是operator>>或operator<<,讓f成爲非成員函數。如果f還需要訪問C的非公有成員,讓f成爲C的友元函數。

4.只有非成員函數對最左邊的參數進行類型轉換(例如當乘法操作符爲成員函數,不會對左操作數進行類型轉換,會出現錯誤)。如果f需要對最左邊的參數進行類型轉換,讓f成爲非成員函數。如果f還需要訪問C的非公有成員,讓f成爲C的友元函數。

5.其他情況下都聲明爲成員函數。如果以上情況都不是,讓f成爲C的成員函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章