1. 程式人生 > >C++的函式過載篇(二)——運算子的過載

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() {