為什麼c 中過載流操作符要用友元函式

2021-07-31 03:08:34 字數 1223 閱讀 7247

class complex

complex():complex(0,0){}

~complex(){}

friend ostream& operator << (ostream& cout, complex& par);

private:

int real;

int imag;

}ostream& operator << (ostream& cout, complex& par);

class complex

complex():complex(0,0){}

~complex(){}

complex operator + (complex par)

private:

int real;

int imag;

}

成員函式執行機理:

假如c1與c2d都為complex類,則,c1+c2被編譯系統解釋為c1.operator +(c2);

1. 實際上流操作符左側必須為cin或cout,即istream或ostream類,不是我們所能修改的類;或者說因為流操作符具有方向性。

這導致我們不能使用成員函式過載,只能使用類外的普通函式過載。

2. 由於我們將類內部的私有成員進行輸入和輸出,所以過載函式必須有對內部成員訪問的許可權。

這導致我們不能使用普通的函式過載,只能使用友元函式過載。

但是使用友元函式會破壞類的封裝性,因此好的解決方法是:

使用一些成員函式來暴露對類成員的訪問,然後使用類外的普通函式過載來進行類成員的輸入輸出。

**如下:

class complex

complex():complex(0,0){}

~complex(){}

int getreal()

int getimag()

void setreal(int parm)

void setimag(int parm)

private:

int real;

int imag;

}ostream& operator << (ostream& cout, complex& par);

為什麼不要過載 , 操作符

是一種邏輯運算子,它內建實現了短路原則,比如 condition1 condition2,如果 condition1 不滿足,那麼 condition2 的值將不會得到計算,同理如果 condition1 condition2,當 condition1 為真時,condition2 的值也不會得到計...

c 中 操作符過載

操作符過載 1.有先後順序,如 t3 t1 t2 則t1 t2等價於t1.operate t2 2.對 操作符進行過載時,如aa是有本質區別的。操作符過載就是用函式的方法對乙個操作符進行重新定義,在該函式中定義了操作符所要完成的功能。其中cout是輸出流ostream中的物件 元素 3.a cout...

C 中 操作符過載

在實際程式中遇到一操作符問題,記錄下來方便以後查詢。在寫hashtable資料結構中,遇到操作符過載問題,具體需求如下 1.a x b 如果a x 為空,則新增記錄 2.b a x 如果a x 為空,則提示出錯 對操作符過載之後發現根本不能解決問題,查詢一些資料後發現該問題為過載後的讀寫問題,乙個過...