有些運算子不能過載為成員函式,例如二元運算子的左運算元不是物件,或者是不能由我們過載運算子的物件
表示式oprd1 b oprd2
等同於operator b(oprd1,oprd2 )
表示式 b oprd
等同於operator b(oprd )
表示式 oprd b
等同於operator b(oprd,0 )
• 將+、-(雙目)過載為非成員函式,並將其宣告為複數類的友元,兩個運算元都是複數類的常引用。 • 將<<(雙目)過載為非成員函式,並將其宣告為複數類的友元,它的左運算元是std::ostream引用,右運算元為複數類的常引用,返回std::ostream引用,用以支援下面形式的輸出:
cout << a << b;
該輸出呼叫的是:
operator << (operator << (cout, a), b);
源**:
//8_3.cpp
#include using namespace std;
class complex
friend complex operator+(const complex &c1, const complex &c2);
friend complex operator-(const complex &c1, const complex &c2);
friend ostream & operator<<(ostream &out, const complex &c);
private:
double real; //複數實部
double imag; //複數虛部
};complex operator+(const complex &c1, const complex &c2)
complex operator-(const complex &c1, const complex &c2)
ostream & operator<<(ostream &out, const complex &c)
int main()
C 高階 七 多型性2
運算子過載是針對新型別資料的實際需要,對原有運算子進行適當的改造。例如 過載為類的非靜態成員函式 過載為非成員函式。函式型別 operator 運算子 形參 引數個數 原運算元個數 1 後置 除外 規則 運算元 源 include using namespace std class complex ...
C 高階 七 多型性6
8 6.cpp include using namespace std class base1 class base2 public base1 void base2 display const class derived public base2 void derived display cons...
C 備考(七)多型性
學習沒有捷徑,但考試有捷徑 常量 const 符號 字串常量 立即數 引用和指標 類的封裝和隱藏 靜態成員 友元函式 類的初始化 初始化方式和順序 類的繼承 繼承方式 構函列表 多繼承 類的多型性 函式過載 運算子過載 虛函式 虛函式表 類的作用域概念 規則不可創造新的運算子 不可修改基本資料型別的...