C++的函式過載篇(二)——運算子的過載
實際上,C++在設計初就運用了函式的過載,如“+”就可以對整數,浮點數進行運算;“<<”左移運算子可以當作提取運算子使用。下面要介紹的便是運算子的過載。
運算子過載有以下規則:
1、C++不允許使用者定義新的運算子,只能對C++已有的運算子進行過載;
2、C++不能過載的運算子只有5個,分別是.(成員運算子)、*(成員指標訪問運算子)、::(域運算子)、sizeof(長度運算子)、?:(條件運算子);
3、過載不能夠運算子物件(運算元)的個數;
4、過載不能夠改變運算子的優先順序;
5、過載不能夠改變運算子的結合性-->如 賦值運算子"="是右結合性,自右向左,過載後仍為右結合性;
6、過載的運算子不能夠有預設的引數,否則就改變了運算子操作物件的個數。
7、過載的運算子必須和使用者自定義的型別的物件一起使用,其引數至少有一個是類物件或者是類物件的引用。
以“+”過載複數運算為例: Complex operator +(int a ,Complex c){
return Complex(a+c.real,c.img);
}
8、用於類物件的運算子一般必須過載,但是有兩個運算子例外, = & 不必使用者過載。
“+”過載為複數運算的例項:
#include <iostream> using namespace std; class Complex { public: Complex(){real=0;img=0;} Complex(double r,double i){real=r;img=i;} Complex operator + (Complex &c2); //宣告過載運算子“+”的函式 void display(); private: double real; double img; }; Complex Complex :: operator +(Complex &c2) //定義過載運算子"+"的函式 { Complex c; c.real = real + c2.real; c.img = img + c2.img; return c; } void Complex :: display() { cout<<"("<<real<<","<<img<<"i)"<<endl; } int main() { Complex c1(3,4),c2(5,-10),c3; c3=c1+c2; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); cout<<"c1+c2="; c3.display(); return 0; }
總結說明:
過載運算子的函式一般格式如下:
1、函式型別 operator 運算子名稱 (形參表){對運算子過載的處理;}
2、函式名是由 operator 和運算子名稱組成的。
3、c1.operator+(c2)是c1+c2的解釋。
截圖如下:
相關推薦
C++的函式過載篇(二)——運算子的過載
實際上,C++在設計初就運用了函式的過載,如“+”就可以對整數,浮點數進行運算;“<<”左移運算子可以當作提取運算子使用。下面要介紹的便是運算子的過載。 運算子過載有以下規則: 1、C++不允許使用者定義新的運算子
C語言基礎篇(二)運算子
導航: 2.1 算數運算子 2.2 邏輯運算子 2.3 位運算 2.4 賦值運算 2.5 記憶體訪問符號 ----->x<------------->x&
【C++】C++類的學習(三)——運算子過載與友元函式
前言 前面的兩篇博文中介紹了類的一些基本特性,今天講一講運算子過載和友元。運算子過載 運算子過載是C++中一種形式的多型,運算子過載將過載的概念運用到運算子上,賦予運算子更多地含義。也許乍然一聽,似乎我們對它並不熟悉,其實它一直為我們使用,例如 * 運算
C++高階篇(2)——運算子過載及流類庫
引言: C++倆大難點,一個是指標,一個就是運算子過載及流類庫,你瞭解嗎? 概述: 運算子過載就是對已有的運算子重新進行定義,賦予其另一種功能
C語言陣列篇(二)指標陣列和陣列指標
陣列指標 和 指標陣列 這兩個名詞可以說是經常搞混了 陣列指標--> 陣列的
C語言入門篇(二)指標的介紹和運用
一.記憶體 1.記憶體的含義: 記憶體是溝通CPU和硬碟的橋樑: (1)暫存CPU中的運算資料 (2)暫存與外部儲存器交換的資料 物理儲存器:實際存在的具體儲存器晶片 主
C++函式的學習(二)
30 TranslateMessage 函式功能:該函式將虛擬鍵訊息轉換為字元訊息。字元訊息被寄送到呼叫執行緒的訊息佇列裡,當下一次執行緒呼叫函式GetMessage或PeekMessage時被讀出。 函式原型: BOOLTranslateMessage( CON
C語言函式篇(二)形參和實參
參引數:形參和實參 ------------------------------- 形參實現一種資料傳入的介面 ,由實參 拷貝 給 形參 拷貝!!!!!!!!!!! 拷貝1: void func(int tmp
C++的函式過載篇(一)
1、在c語言中是沒有函式過載的。2、c++的函式過載可以使用函式模板來簡化重複的程式碼量,但是關於函式的過載有如下幾個限制: a)它只適用於函式的引數個數相同而型別不同; b)它只適用於函式體相同的情況;下面是我測試的程式碼:OverloadModel.cpp/*
C++學習筆記(10)運算子過載,友元函式,友元類
c++允許我們為運算子定義專門的函式,這被稱為運算子過載: 運算子可以簡化字串的操作,‘+’,以及使用關係運算符比較字串,[ ]運算子訪問向量中的元素; 例如: #include <iostream> #include <string> #include <
C# Stream篇(二) -- TextReader 和StreamReader
ros 開頭 設置 block 哪些 {0} 實例 adt 一點 TextReader 和StreamReader 目錄: 為什麽要介紹 TextReader? TextReader的常用屬性和方法 TextReader 示例 從StreamReader想到多態 簡單介紹下
準備篇(二)C語言
log https color c語言部分 ccf align col c語言 cat 因為C語言部分打算單獨維護,所以 -----x---------------x---------------x---------------x----- 傳送門 -----x----
手遊客戶端的效能篇(二)----Unity和C#版之字串拼接,Struct和Class的區別與應用
接著上篇文章: 2、字串拼接(簡單,直接結論) 使用“a” + “b”在幾次(10次以內吧)連線是不會產生gc的但是大量連線就會產生; 連線多的用StringBuilder,內部
Java伺服器部署基於OpenCV的C++影象處理專案(二)編譯篇
Java伺服器部署基於OpenCV的C++影象處理專案(二)編譯篇 部署好環境之後,本篇記錄編譯的詳細步驟。部署環境篇 1.建立檔案 在native.cpp中寫入以下程式碼。 #include <jni.h> #include <string>
c++學習總結(四)——運算子過載與標準模板庫(STL)
一、心得總結 運算子過載使得使用者自定義的資料以一種更簡潔的方式工作。例如在做ATM模擬系統時,使用過載“<”來比較時間,可以簡化程式,減少程式碼。另外,我們也可以過載運算子函式,將運算子用於操作自定義的資料型別。過載運算子函式可以對運算子做出新的解釋,即定義使用
C語言陣列篇(四)二維陣列
二維陣列宣告: int a[2][3] ={{1,2,3},{4,5,6}; //兩行 三列 1 2 3 4 5 6 二
C語言陣列篇(五)多級指標和二維陣列指標的區別
多級指標 以二級指標為例 二級指標的由來是 指標陣列 的指標形式. int *p[10] 讀取的順序是 p[10] --> 10個空間的陣列 * p[10] --> 這10個空間的數組裡面存放的資
C語言字元篇(五)記憶體函式
memcpy不可以把目的地址寫成本身 但是memmove可以,因為它是先儲存到臨時空間 #include <string.h> void *memcpy(void *dest, const voi
C語言指標知識點(二):指標在函式的輸入、輸出時 的性質
主調函式可以把棧區、堆區、全域性區的資料地址傳給被調函式;被調函式只能返回堆區和全域性區的資料及地址。 指標作為函式的傳入引數,由主調函式分配記憶體;指標作為函式的輸出時,由被調函式分配記憶體。 如果想通過形參改變實參的內容,必須地址傳遞(C中,C++中還可以通過引用的
C語言面試題---指標篇(二)
# include <stdio.h># include <stdlib.h># include <string.h>void getMemory( char **p , int num){ *p = malloc(num);} int main() {