1. 程式人生 > >過載自增運算子(前置自增++p和後置自增p++)

過載自增運算子(前置自增++p和後置自增p++)

如何過載增量運算子 ++ 和 --
    運算子++和—有前置和後置兩種形式,如果不區分前置和後置,則使用operator++( )或operator--( )即可;否則,要使用operator++( )或operator--( )來過載前置運算子,使用operator++(int)或operator--(int)來過載後置運算子,呼叫時,引數int被傳遞給值0。如下列程式段:

(1) 用成員函式的形式來進行過載
如果++為前增量運算子時,過載函式的一般格式為:
< type > ClassName :: operator ++ ( )
{
 //…
}

如果++為後增量運算子時,過載函式的一般格式為:
< type > ClassName :: operator ++ ( int  )
{
 //…
}

(2) 非成員函式形式的過載
以++ 為例說明
用友元函式來實現“++”運算子的過載時,前置++運算子的過載的一般格式:
friend <type> operator ++ (ClassName & );
其中,第一個引數是要實現++運算的物件。

後置++運算子的過載的一般格式:
friend <type> operator ++(ClassName &,int);
其中,第一個引數是要實現++運算的物件;而第二個引數除了用於區分是後置運算外,並沒有其他意義,故起引數可有可無.

例子

Clock Clock::operator++( ) //前置
{
incOneSecond( ); 
cout<<”++Clock:”;
return *this;
}
Clock Clock::operator++( int ) //後置
{  Clock temp(*this);
incOneSecond( );
cout<<”Clock++:”;
return temp;
}


相關推薦

過載運算子前置++pp++

如何過載增量運算子 ++ 和 --     運算子++和—有前置和後置兩種形式,如果不區分前置和後置,則使用operator++( )或operator--( )即可;否則,要使用operator++( )或operator--( )來過載前置運算子,使用operator+

C/C++中減的前置區別

       自增自減操作符在程式設計中很常用,都分為分為前置和後置兩種操作符,對於兩者的區別,C++ primer中有著如下說明:        1. 前置操作返回的結果為左值,後置操作返回的是右值,也就是說執行如下的程式碼都會編譯不通過: int i = 0, j

除錯經驗——如何檢視Oracle定義函式 How to view definition of user defined functions in Oracle

問題描述: 現有的Query中似乎使用了一個自定義函式String_to_list,為了排查問題,需要檢視這個函式的定義。 方法:   --新建的function,並未儲存在All_ojbects表中,而是儲存在user_objects表中 SELECT * FRO

Android 定義view1) --- Attr、StyleTheme詳解

轉載:https://www.jianshu.com/p/dd79220b47dd 概念說明:       Attr:屬性,風格樣式的最小單元;      Style:風格,它是一系列Attr的集合用以定義一個View

運算子前置++++過載為時鐘類的成員函式

源程式: #include<iostream.h> class Clock //時鐘類宣告 { public: //外部介面 Clock(int NewH=0, int NewM

前置操作符操作符三十四

C++ 前置 操作符 重載 我們之前在 C 語言中學習了前置 ++ 和後置 ++。應該知道 i++ 是將 i 的值作為返回值,i + 1;++i 是先 i+1,再返回 i 的值。那麽它們真的有區別嗎?我們來編程看看,在 VS 中進行反匯編,看看匯編代碼是怎樣處理的#includ

【C++】前置操作符++i操作符i++

 一、自增和自減的基本使用方法 自增的兩種形式:  i++ i 的值作為返回值,i 自增 1; ++i i 自增 1,i 的值作為返回值。 Example: #include <iostream> #include <string&

C++學習之分支語句邏輯運算子switch語句,breakcontinue語句

1.switch語句 switch(integer-expression) { case label1:statement(s) case label2:statement(s) ....... default :statement(s

thinkPHP 空模組空操作、前置操作操作 詳細介紹十四

一、空模組和空操作1、空操作function _empty($name){$this->show("$name 不存在 <a href='__APP__/Index/index'>返回首頁</a>");}2.空模組(EmptyAction.class.php的檔案)class E

Spring 學習十六——Spring AOP之前置通知通知

spring aop 1)加入jar包 com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.R

Spring入門學習AOP前置通知通知 第十五節

Spring入門學習(AOP前置通知) AOP前置通知 後置通知 AOP前置通知 前置通知:在方法之前執行的通知,使用`@Before`註解並將切入點表示式的值作為註解值。 使用Maven新增依賴的jar包:<!--

《Java從入門到失業》第三章:基礎語法及基本程式結構3.7運算子小數二進位制、科學記數法、IEEE754標準

3.7.1.4浮點數運算        要討論浮點數運算,牽涉到的知識比較多,下面一點一點的來逐步展開。為了便於同時討論十進位制和二進位制數,我們做一個約定,我們把十進位制數簡寫為N10,把二進位制數簡寫為N2。 3.7.1.4.1小數的二進位制 &

poj 1703 Find them, Catch them種類並查集一種巧妙的方法

ogr not 帶權並查集 drag single sca course first req Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions

python學習-09查找、排序淺談數據結構

使用 指定 矩陣 這樣的 重復 n) init enc nbsp 查找的方法: 排序的方法: 簡單的數據結構: 一、算計基礎 1.1、什麽是算法: 算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統的方法描述解決問題的策略

C++中的前置++

增量 後置 內置 因此 效率 要求 來講 註意 對象 在C++中進行操作符重載的時候,前置++返回的是一個引用。 這就設計到了對於基本變量進行前置操作時候的理解了。 例如,對於int類型變量,在進行前置++的時候,是會將i進行加1,然後返回i的引用。而i++是先創建一個i的

精選11道Java技術面試題並有答案包含部分阿裏華為的面試題

mit 高度 nth erro 多線程 edi GC expire 棧溢出 JVM的類加載機制是什麽?有哪些實現方式? 類加載機制: 類的加載指的是將類的.class文件中的二進制數據讀入到內存中,將其放在運行時數據區的方法去內,然後在堆區創建一個java.lang.Cl

第三篇 Postman之 Tests處理器,斷言

下一個 parse 後置處理器 token 9.png jmeter pri 獲取 strong 第二篇裏講了手動設置全局變量及局部變量的方法,但是這有一個缺點,就是每次測試之前,都需要獲取相關變量值,手動再填寫更新到對應的全局變量或者局部變量裏,這對於想進行自動化執行的人

C++筆記 第四十課 前置操作符操作符---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第四十課 前置操作符和後置操作符 1.值得思考的問題 下面的程式碼有沒有區別?為什麼?答案是5.真正的區別 i++; //i的值作為返回值,i自增1 ++i; // i自增1

Spring Aop底層原理詳解利用spring處理器實現AOP

寫在前面:對於一個java程式設計師來說,相信絕大多數都有這樣的面試經歷,面試官問:你知道什麼是aop嗎?談談你是怎麼理解aop的?等等諸如此類關於aop的問題。當然對於一些小白可能會一臉懵逼;對於一些工作一兩年的,可能知道,哦!aop就是面向切面變成,列印日誌啊,什麼什麼的,要是有點學

普通檔案的上傳表單上傳ajax檔案非同步上傳

一.表單上傳: html客戶端部分: <form action="upload.ashx" method="post" enctype="multipart/form-data"> 選擇檔案:<input type="file" name="file1" /><br /