重載操作符與友元

重載操作符與友元

這裏只談雙目操作符(單目操作符請使用成員重載),操作符是友元函數也可以成員函數。

(設我們自定義類型爲Point a爲其實例;)

第一種情況左目是自定義類型:

如:a+b,a-b;

這時操作符既可以友元又可以成員,爲了保持類的封裝性,儘可以不使用友元。所以這裏操作“+”“-”都應該爲成員函數,調用關係爲

a.operator+(b)和a.operator+(b);

第二種情況左目是庫定義類型:

如:cout<<a;//這裏的“<<”要麼是cout類型的成員函數,要麼是a的友元函數.

操作符“<<”假設是cout其類型的成員函數,即cout.perator<<(a);由於a是用戶自定義類型,C++沒有爲我們定義這個成員函數。所以,假設不成立;

操作符“<<”假設是a的友元,即operator<<(cout,a).可以正常工作。

因此我們總結:

雙目操作:

1,左目爲自定義類型時,我們應該使用成員函數重載

2,左目爲庫定義類型時,我們必須使用友元函數重載,在右目中定義友元操作符

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