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