重載操作符與友元
這裏只談雙目操作符(單目操作符請使用成員重載),操作符是友元函數也可以成員函數。
(設我們自定義類型爲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,左目爲庫定義類型時,我們必須使用友元函數重載,在右目中定義友元操作符