C++中operator的主要用法

1.??operator 用于類型轉換函數:

類型轉換函數的特征:

1)??型轉換函數定義在源類中;
2)??須由 operator 修飾,函數名稱是目標類型名或目標類名;
3)??函數沒有參數,沒有返回值,但是有return
語句,在return語句中返回目標類型數據或調用目標類的構造函數。

類型轉換函數主要有兩類:

1)??對象向基本數據類型轉換:

? ? 對象向不同類的對象的轉換:

例程1:
//通過類型轉換函數求半徑為5的圓的面積
//并將其存儲在float型變量中打印輸出
#i nclude <iostream>
using namespace std;

class CArea
{
???????float area;
public:
???????CArea()
???????{
??????????????area=0;
???????}
???????CArea(float a)???????????//重載含有一個參數的構造函數
???????{
??????????????area=a;
???????}
???????void getArea()
???????{
??????????????cout<<area<<endl;
???????}
???????void setArea(float a)
???????{
??????????????area=a;
???????}
???????operator float()????????????//類型轉換函數
???????{??????????????????????????????
//將面積類對象轉換為float型數據
??????????????return area;
???????}
};

class CCircle
{
???????float R;
public:
???????void getR()
???????{
??????????????cout<<R<<endl;
???????}
???????void setR(float r)
???????{
??????????????R=r;
???????}
???????operator CArea()???//類型轉換函數
???????{?????????????????????????????????//將圓類對象轉為面積類對象
??????????????float area=3.1415926*R*R;
??????????????return (CArea(area));
???????}???
};

void main()
{
???????CCircle cir;
???????CArea are;
???????float a;

???????cir.setR(5);
???????cir.getR();?????????????????????//打印圓的半徑
???????are.getArea();???????????//打印轉換前的面積??????????????????
????
???????are=cir;?????????????????//將圓類對象轉為面積類對象
???????are.getArea();???????????//打印轉換后的面積???
???????a=are;??????????????????????????//將面積類對象轉換為float型數據
???????cout<<a<<endl;???????????????????
}


2.??operator 用于操作符重載:


操作符重載的概念:

????
??將現有操作符與一個成員函數相關聯,并將該操作符與其成員對象(操作數)一起使用。

注意事項:

1)??重載不能改變操作符的基本功能,以及該操作符的優先級順序。

2)??重載不應改變操作符的本來含義。

3)??只能對已有的操作符進行重載,而不能重載新符號。

4)??操作符重載只對類可用。

5)??以下運算符不能被重載:

.???????原點操作符(成員訪問符)

*?????指向成員的指針

::???????作用域解析符

? :?????問號條件運算符

sizeof 操作數的字節數

???操作符函數的一般格式:

???????????????return_type operator op(argument list);

??????return_type:返回類型(要得到什么)

????????op:要重載的操作符

??????argument list:參數列表(操作數有哪些)

例程2:
//重載大于號操作符比較兩個人的工資
#i nclude <iostream>
using namespace std;

class employee
{
???????int salary;
public:
???????void setSalary(int s)
???????{
??????????????salary=s;
???????}
???????void getSalary()
???????{
??????????????cout<<salary<<endl;
???????}
???????bool operator >(const employee & e)//重載大于號操作符
???????{
??????????????if(salary > e.salary)
?????????????????????return true;
??????????????else
?????????????????????return false;
???????}
};
void main()
{
???????employee emp1,emp2;
???????emp1.setSalary(1000);
???????emp2.setSalary(2000);
???????if (emp1 > emp2)
???????{
??????????????cout<<"emp1比emp2工資高"<<endl;
???????}
???????else
???????{
??????????????cout<<"emlp1沒有emp2工資高"<<endl;
???????}
}

轉自:http://blog.sina.com.cn/s/blog_6ac4a2d3010127cl.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458702.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458702.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聲紋識別

一、 聲紋識別是一項根據語音波形中反映說話人生理和行為特征的語音參數&#xff0c;自動識別說話人身份的技術。與語音識別不同的是&#xff0c;聲紋識別利用的是語音信號中的說話人身份信息&#xff0c;而不考慮語音中的字詞意思。由于每個人的生物特征具有與其他人不同的唯一…

Asp.net mvc 實時生成縮率圖到硬盤

之前對于縮率圖的處理是在圖片上傳到服務器之后&#xff0c;同步生成兩張不同尺寸的縮率供前端調用&#xff0c;剛開始還能滿足需求&#xff0c;慢慢的隨著前端展示的多樣化&#xff0c;縮率圖已不能前端展示的需求&#xff0c;所以考慮做一個實時生成圖片縮率圖服務。 每次調用…

數據庫事務的隔離機制

數據庫事務(Database Transaction) &#xff0c;是指作為單個邏輯工作單元執行的一系列操作&#xff0c;要么完全地執行&#xff0c;要么完全地不執行。----百度百科就是說你定義一組數據庫操作&#xff0c;然后告訴數據庫說這些操作要么都成功&#xff0c;要么都不成功。類似于…

如何使用CppUnit進行單元測試

http://www.vckbase.com/document/viewdoc/?id1762 一、前言 測試驅動開發(TDD)是以測試作為開發過程的中心&#xff0c;它堅持&#xff0c;在編寫實際代碼之前&#xff0c;先寫好基于產品代碼的測試代碼。開發過程的目標就是首先使測試能夠通過&#xff0c;然后再優化設計結構…

錄制wav格式的音頻

項目中有面部認證、聲紋認證&#xff0c;服務器端要求上傳wav格式的音頻&#xff0c;所以寫了這樣一個小demo。 剛剛開始寫博客還不知道怎么上傳代碼&#xff0c;就復制了&#xff0c;嘻嘻 DotimeManage.h class DotimeManage; protocol DotimeManageDelegate <NSObject&g…

iOS開發網絡篇—Reachability檢測網絡狀態

前言&#xff1a;當應用程序需要訪問網絡的時候&#xff0c;它首先應該檢查設備的網絡狀態&#xff0c;確認設備的網絡環境及連接情況&#xff0c;并針對這些情況提醒用戶做出相應的處理。最好能監聽設備的網絡狀態的改變&#xff0c;當設備網絡狀態連接、斷開時&#xff0c;程…

網絡七層協議 五層模型 TCP連接 HTTP連接 socket套接字

socket&#xff08;套接字&#xff09;是通信的基石&#xff0c;是支持TCP/IP協議的網絡通信的基本操作單元&#xff0c;包含進行網絡通信必須的五種信息&#xff1a;連接使用的協議&#xff0c;本地主機的IP地址&#xff0c;本地進程的協議端口&#xff0c;遠地主機的IP地址&a…

[vs2010 project] CppUnit快速入門

簡介 測試是軟件開發過程中極其重要的一環&#xff0c;詳盡周密的測試能夠減少軟件BUG&#xff0c;提高軟件品質。測試包括單元測試、系統測試等。其中單元測試是指針對軟件功能單元所作的測試&#xff0c;這里的功能單元可以是一個類的屬性或者方法&#xff0c;測試的目的是看…

[javascript|基本概念|Number]學習筆記

Number類型的值&#xff1a;整數/浮點數值 整數 十進制 e.g.: var intNum 50; 八進制 (嚴格模式下無效,解析錯誤)字面值首位必須是0,之后的數字序列為0&#xff5e;7 e.g.: var intNum 070; //解析為十進制56 (如果字面值數值超出了范圍&#xff0c;前導0將被忽略&#xf…

[轉]深入理解linux內核list_head

http://blog.chinaunix.net/uid-27122224-id-3277511.html 深入理解linux內核list_head的實現 2012-07-17 17:37:01 分類&#xff1a; LINUX 前言&#xff1a;在linux源代碼中有個頭文件為list.h。很多linux下的源代碼都會使用這個頭文件&#xff0c;它里面定義 了一個結構,以及…

xcode左側不顯示工程文件目錄,提示NO Filter Results

解決辦法&#xff1a; What solved was to go to Navigate > Reveal in Project Navigator . After this, the structure appeared again.

【VC++技術雜談005】如何與程控儀器通過GPIB接口進行通信

在工控測試系統中&#xff0c;經常需要使用到各類程控儀器&#xff0c;這些程控儀器通常具有GPIB、LAN、USB等硬件接口&#xff0c;計算機通過這些接口能夠與其通信&#xff0c;從而實現自動測量、數據采集、數據分析和數據處理等操作。本文主要介紹如何與程控儀器通過GPIB接口…

標題在上邊框中的html(fieldset標簽)

<fieldset> <legend>標題</legend> 內容 </fieldset> 轉載于:https://www.cnblogs.com/lswbk/p/4952820.html

移除項目中的CocoaPods

在項目中移除CocoaPods cocoaPods雖然很方便&#xff0c;但是我是真心的不喜歡用它&#xff0c;總是出錯如果你覺得CocoaPods讓你的項目出現了問題&#xff0c;不好用甚至是惡心&#xff0c;想將其從項目中徹底移除&#xff0c;也有方法&#xff1a; 1.刪除工程文件夾下的Podf…

ShellExecute使用詳解

有三個API函數可以運行可執行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因為使用復雜&#xff0c;比較少用。 2.WinExec主要運行EXE文件。如&#xff1a;WinExec(Notepad.exe Readme.txt, SW_SHOW); 3.ShellExecute不僅可以運行EXE文件&#xff0c;也可以運行…

javascript筆記整理(對象基礎)

一、名詞解釋 1.基于對象&#xff08;一切皆對象&#xff0c;以對象的概念來編程&#xff09; 2.面向對象編程(Object Oriented Programming&#xff0c;OOP) A.對象(JavaScript 中的所有事物都是對象) B.對象的屬性和行為 屬性:用數據值來描述他的狀態 行為:用來改變對象行為的…

java的安裝和配置

JRE (JAVA Runtime Enviroment java運行環境),包括JVM(java虛擬機)和java程序所需的核心功能類庫&#xff0c;如果只是運行java程序&#xff0c;只需安裝JRE。 JDK &#xff08;Java Development Kit 開發工具包&#xff09;包括開發JAVA程序時所需的工具&#xff0c;包括JRE…

#if, #ifdef, #ifndef, #else, #elif, #endif的用法

#ifdef的用法 靈活使用#ifdef指示符&#xff0c;我們可以區隔一些與特定頭文件、程序庫和其他文件版本有關的代碼。 代碼舉例&#xff1a;新建define.cpp文件 &#xff03;include "iostream.h" int main() { #ifdef DEBUG cout<< "Beginning ex…

redhat 6.6 安裝 (LVM)

http://www.cnblogs.com/kerrycode/p/4341960.html轉載于:https://www.cnblogs.com/zengkefu/p/4954955.html

MFC對話框最小化到托盤

1、在資源中的Icon中導入一個自己喜歡的圖標&#xff0c;ID命名為IDR_MAINFRAME&#xff0c;將先前的IDR_MAINFRAME的圖標刪除掉&#xff1b; 2、在自己的Dialog頭文件中定義一個變量 NOTIFYICONDATA m_nid&#xff0c;關于該結構體的具體信息可以查閱MSDN&#xff1b; 3、添加…