1. 程式人生 > >【C++】成員函式過載二元和一元運算子

【C++】成員函式過載二元和一元運算子

過載雙目運算子時,運算子函式中應該具有兩個引數,若運算子函式作為類的成員函式(當運算子過載函式作為類的成員函式時,要求運算元左邊必須是一個物件,而函式的引數可以是同類的物件也可以是普通的變數),則只需要一個引數。

雙目運算子

雙目運算子就是具有兩個運算元的運算子。如 +、-、==等。

對雙目運算子而言,成員函式過載運算子的函式引數表中只有一個引數,而用友元函式過載運算子函式引數表中含有兩個引數。

成員函式過載 == 、>運算子:

    bool operator==(CTime& time);
    bool operator>(CTime& time);
//判斷物件的每個成員變數是否相等
bool CTime::operator==(CTime& time)
{
    if (m_nHour == time.m_nHour&&m_nMinute == time.m_nMinute&&m_nSecond == time.m_nSecond)
    {
        return true;
    }
    return false;
}

bool CTime::operator>(CTime& time)
{
    if (m_nHour > time.m_nHour) //先判斷兩個物件的小時數的大小
{ return true; } else if (m_nHour < time.m_nHour) { return false; } else //這是兩個物件小時數相等的情況,接下來就判斷分鐘數 { if (m_nMinute> time.m_nMinute) //再判斷兩個物件的分鐘數的大小 { return true; } else if (m_nMinute < time.m_nMinute) { return
false; } else //這是兩個物件的時鐘和分鐘相等的情況下 { if (m_nSecond>time.m_nSecond) //最後比較秒鐘 { return true; } else { return false; } } } return false; //最後就是兩個物件相等,也不滿足一個物件大於另外一個物件的情況,返回false }

成員函式過載++運算子

    CTime operator++();//前置的++
    CTime operator++(int);//後置++,這個int型別的引數只是為了區分,我們並不會使用這個引數,所以我們不需要形參的名字
//前置的++
CTime CTime::operator++() //過載++(前置)運算子
{
    CTime time(0,0,1); //定義了一個秒數為1的物件
    *this = *this + time;//由於前面的函式已經過載了加號運算子,裡面已經定義好了相關的操作,所以這句程式碼呼叫了加號運算子的過載函式,並將物件的秒數加一
    return *this; //前置++的操作順序就是先加再返回它的值
}

CTime CTime::operator++(int) //過載++(後置)運算子
{
    CTime time = *this;//後置++的操作規則是先返回再加,所以需要建立一個臨時變數儲存好這個物件的值
    CTime time2(0, 0, 1);//定義了一個秒數為1的物件
    *this = *this + time2;//同上呼叫了加法運算子的過載函式
    return *this;//返回加法操作之前的物件的值
}
    CTime time(10, 50, 20);

    ++time;
    std::cout << time.getHour() << ":" << time.getMinute() << ":" << time.getSecond() << endl;

    time++;
    std::cout << time.getHour() << ":" << time.getMinute() << ":" << time.getSecond() << endl;

結果

原始碼下載地址:

GITHUB原始碼下載地址:

本文章由[諳憶]編寫, 所有權利保留。
歡迎轉載,分享是進步的源泉。

相關推薦

C++成員函式過載二元一元運算子

過載雙目運算子時,運算子函式中應該具有兩個引數,若運算子函式作為類的成員函式(當運算子過載函式作為類的成員函式時,要求運算元左邊必須是一個物件,而函式的引數可以是同類的物件也可以是普通的變數),則只需要一個引數。 雙目運算子 雙目運算子就是具

成員函式友元函式 完成二元一元運算子過載(進階1)

二元運算子過載: 全域性函式: #include <iostream> using namespace std; class Complex{//複數類 private: int

C++物件函式的覆蓋、過載、多型

覆蓋 Coverage 在基類中定義了一個非虛擬函式,然後在派生類中又定義了一個同名同參數同返回型別的函式,既是覆蓋 在派生類物件上直接呼叫這個函式名,則只會呼叫派生類中的同名函式 #include <iostream> using namespace std;

C++inline函式 && CC++的相互呼叫

一、inline函式 (佔用太大空間) 在編譯時處理。呼叫點把程式碼直接展開 注意* 是以程式碼膨脹為代價 當函式堆疊的開銷>函式執行的開銷(建議使用inline函式) 一般寫在標頭檔案下 inline函式          

C#— 基礎函式運算子表示式

從前人(學習完這個專案的人)那裡聽說傳智播客是北京最大計算機培訓班黑馬的前身,感覺對他的興趣又深了。只要對它有了興趣自然學的就會快了。看C#視訊有一段時間了,小楊老師講課很有意思,一點也不枯燥,幽默風趣還有一點點自戀哈哈哈,好像他快禿頂了。 對於C#視訊就像是我才來提高班學

C字符串常量字符數組

gcc pre class fun 後者 一段 put light cmp 此次博客是轉載某位博主的文章,不過現在找不到了,所以先聲明一下。 先貼一段代碼: #include <stdio.h> int main(int argc, const char**

5、C++指標/引用(指標引用的區別)

一、指標 int p=12; int *q; int *q=&p;     這裡p為int型別的變數,&p就是p的記憶體地址,*q是一個int型別的變數(是一個值),q為指標是地址,int q=&p;把p的地址賦給了指標q,所以q就

C++ ofstream列對齊設定小數點精度

https://blog.csdn.net/ahhsqmyzwby/article/details/51570234 最近工程專案中,需要對輸出的檔案的格式作要求。因為每一行有很多列,每一列空格隔開,代表一個column,存放數字。 查找了一些資料得到如下: 1、需要使得每一列右對齊。

C 初識函式指標

函式指標,顧名思義,也就是指標,不過這個指標是指向函式的指標。 接下來的一個宣告更有趣,但也更容易讓人疑惑: int (*f)(); 確定括號的含義是分析這個宣告的一個重要步驟。這個宣告有兩個括號,每對的含義各不相同。第2個括號是函式呼叫操作符,第1個括號只起到聚

c#佇列(Queue)MSMQ(訊息佇列)的基礎使用

    首先我們知道佇列是先進先出的機制,所以在處理併發是個不錯的選擇。然後就寫兩個佇列的簡單應用。 Queue 名稱空間     名稱空間:System.Collections,不在這裡做過多的理論解釋,這個東西非常的好理解。     可以看下官方文件:https://docs.microsof

C++函式返回結構體的程式碼 及 字串常量傳入子函式的指標實現

說明: 1. 下面的子函式 getStu 裡,傳入了三個引數: 字串指標 char * name 整型變數 int k_year; char * k_sex; 2. 當把字串作為引數傳遞給子函式時,主程式中可以使用字串常量,但子函式的形參只能使用字元型指標 char

C++行內函數巨集的區別

行內函數 行內函數指的是用[ inline ]關鍵字修飾的函式,在類體內定義的函式會被預設定義為行內函數 特性 行內函數會在【編譯】期間進行替換,就是將呼叫該函式的地方換成【函式體】(類似於C語言中的巨集,然而巨集是在【預處理】階段進行替換) 行內函數和巨集的不同之處 1、

C#建構函式疑問點總結

前言 在學習C#的過程中,建構函式中的很多知識細節我感覺還是有必要總結一下的。 問題總結 一、建構函式的作用是什麼? 建構函式的主要作用是在建立物件(宣告物件)時初始化物件,一個類被定義時至少要有一個建構函式,如果定義類時沒有宣告建構函式,則系統會提供一個預設的無參建構函式。 二、如何理

C++ format 函式詳解

Format是一個很常用,卻又似乎很煩的方法,以下是它的完整概貌,以供大家查詢之用:一、字串首先看它的宣告:function Format(const Format: string; const Args: array of const): string; overload;事實上Format方法有兩個種形式

C 作為函式引數的多維陣列

我們都知道一維陣列作為函式引數的情況,作為函式引數的一維陣列名——實際傳遞的是指向陣列第一個元素的指標。 多維陣列名作為函式引數的傳遞方式和一維陣列名相同——實際傳遞的也是指向第一個元素的指標。 但是,兩者之間不同的是,多維陣列的每個元素本身就是另外一個數組,(例如二位陣

成員函式 過載 覆蓋 隱藏 的區別

a.成員函式被過載的特徵: (1)相同的範圍(比如在同一個類中); (2)函式名字相同; (3)引數不同; (4)virtual 關鍵字可有可無。 b.覆蓋是指派生類函式覆蓋基類函式,特徵是: (1)不同的範圍(分別位於派生類與基類); (2)函式名字相同; (3)引數相

C#-屬性(Property)欄位(Field)的區別

導讀:      近期學習過程中發現了一些問題,我的學習只是學習,敲程式碼就是敲程式碼,沒有加入思考,也不問為什麼就直接去敲人家寫好的例子去敲,把知識都學死了,逐漸散失了思考能力,所以學習的興趣大打折

C++函式呼叫this

再一次面試中,被問到,函式呼叫時是怎麼知道物件的成員資訊的,用vs除錯了一把:#include "stdafx.h" #include <string> #include <iostr

C#delegate委託的定義使用方法

using System; namespace delegate委託的定義和使用方法 { class MainClass { //【1】 定義一個返回值是string,無引數的

C++accumulate函式的用法(STL)

在標頭檔案#include <numeric> 裡(但是我用的時候在PAT裡面不寫標頭檔案似乎也沒關係……)主要是用來累加容器裡面的值,比如int、string之類,可以少寫一個for迴圈比