C 基礎教程物件導向(學習筆記(23))

2021-08-29 03:01:13 字數 1758 閱讀 8352

過載一元運算子

與您目前看到的運算子不同,正(+),負( - )和邏輯非(!)運算子都是一元運算子,這意味著它們只能在乙個運算元上執行。因為它們僅對它們所應用的物件進行操作,所以通常將一元運算子過載實現為成員函式。所有三個運算元都以相同的方式實現。

讓我們看一下我們如何在前面的例子中使用的cents類上實現operator-:

#include class cents

// 作為乙個成員函式實現過載 -cents

cents operator-() const;

int getcents() const };

//注意:此函式是成員函式!

cents cents::operator-() const

int main()

這應該是直截了當的。我們的過載負運算子( - )是作為成員函式實現的一元運算子,因此它不帶引數(它在* this物件上執行)。它返回乙個cents物件,它取決於原始的cents值。因為operator-不修改cents物件,所以我們可以(並且應該)使它成為const函式(因此可以在const cents物件上呼叫它)。

注意,負操作符和減號操作符之間沒有混淆 - 因為它們具有不同數量的引數。

這是另乙個例子。的!operator是邏輯否定運算子 - 如果表示式的計算結果為「true」,則運算子!將返回false,反之亦然。我們通常會看到這個應用於布林變數來測試它們是否為真:

else

對於整數,0的計算結果為false,其他任何結果為true,因此運算子!如果應用於整數,則對於整數值0將返回true,否則返回false。

擴充套件概念,我們可以說是operator!如果物件的狀態是「假」,「零」或缺省初始化狀態,則應評估為true。

以下示例顯示了operator- 和 operator!的過載,對於使用者定義的point類:

#include class point

// 將point轉換為負等效值

point operator- () const;

// 如果將點設定在原點,則返回true

bool operator! () const;

double getx()

double gety()

double getz() };

// 將point轉換為負等效值

point point::operator- () const

// 如果點設定在原點,則返回true,否則返回false

bool point::operator! () const

int main()

過載運算子!如果point設定為座標(0.0,0.0,0.0)處的預設值,則此類返回布林值「true」。因此,上面的**產生了結果:

point is set at the origin.

quiz time:

1)為point類實現過載operator +。

解決方案

這是顯而易見的解決方案:

point point::operator+ () const

但是因為我們返回的point與我們正在操作的那個完全相同,所以下面也有效:

point point::operator+ () const

C 基礎教程物件導向(學習筆記5(2))

在編寫具有多個建構函式的類 大多數建構函式 時,必須為每個建構函式中的所有成員指定預設值會導致冗餘 如果更新成員的預設值,則需要觸控每個建構函式。從c 11開始,可以直接為普通類成員變數 不使用static關鍵字的變數 提供預設初始化值 class rectangle void print int ...

C 基礎教程物件導向(學習筆記(24))

過載比較運算子相對簡單,因為它們遵循我們在過載其他運算子時看到的相同模式。因為比較運算子都是不修改左運算元的二元運算子,所以我們將使過載的比較運算子宣告為友元函式。這是乙個帶有過載運算子 和operator!的car類的示例。include include class car friend bool...

C 基礎教程物件導向(學習筆記(29))

重新初始化型別 由於我們將在接下來的幾節課中談論很多初始化,讓我們首先回顧一下c 支援的初始化型別 直接初始化,統一初始化或拷貝初始化。以下是使用我們的fraction類的所有示例 include include class fraction friend std ostream operator ...