操作符過載的概念

2022-02-04 20:50:02 字數 1871 閱讀 8141

複數計算第一種形式(自定義複數類):

1 #include 2

3class

complex 413

14int

geta()

1518

19int

getb()

2023

24 friend complex add(const complex& p1, const complex&p2);

25};

2627 complex add(const complex& p1, const complex&p2)

2836

37int

main()

38

question:

add 函式可以解決complex物件相加的問題;

但是complex是現實世界的確定存在的複數;

並且複數的地位在數學中的地位與普通的實數地位i相同;

為什麼不能+操作符也支援複數相加呢?

操作符過載:

c++中的operator關鍵字可以定義特殊的函式

operator的本質是通過函式過載操作符;

1 #include 2

3class

complex 413

14int

geta()

1518

19int

getb()

2023

24 friend complex operator + (const complex& p1, const complex&p2);

25};

2627 complex operator + (const complex& p1, const complex&p2)

2836

37int

main()

38

操作符過載的本質就是函式過載.

那還有什麼深度挖掘的地方呢?上面的例子我們使用了友元,而友元是我們盡量避免的,那我們可以怎樣修改呢?

-可以將操作符過載函式定義為類中的  成員函式.

-比全域性操作符過載函式少乙個引數(左運算元)

-不需要依賴友元就可以完成操作符過載;

-編譯器優先在成員函式中尋找操作符操作函式;

例項**分析3:

1 #include 2

3class

complex 413

14int

geta()

1518

19int

getb()

2023

24 complex operator + (const complex&p)

2533

34 friend complex operator + (const complex& p1, const complex&p2);

35};

3637 complex operator + (const complex& p1, const complex&p2)

3846

47int

main()

48

小結:操作符過載是c++的強大特性之一;

操作符過載的本質是通過函數擴充套件操作符的功能;

operator關鍵字是實現操作符過載的關鍵

操作符過載遵循相同的函式過載規則

全域性函式成員函式都可以實現對操作符的過載.

29 操作符過載的概念

1 需要解決的問題 include class complex complex int a,int b int main complex c2 complex c3 c1 c2 return 0 很明顯編譯器怎麼會知道你要實現複數運算?那如何用現有的知識實現這個複數的相加運算?include cla...

操作符過載

ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...

操作符過載

1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...