【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函式 && C和C++的相互呼叫
一、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迴圈比