C++操作符重載

來源:互聯網
上載者:User

標籤:

什麼是重載:讓操作符具有自己想要的功能。

#ifndef _ARRAY_H_#define _ARRAY_H_class Array{private:    int mLength;    int* mSpace;public:    Array(int length);    Array(const Array& obj);    int length();    void setData(int index, int value);    int getData(int index);    ~Array();    // 重載[]操作符,從數組類中取值(int類型)    int &operator[](int i);    // 重載操作符=,複製數組類    Array& operator=(Array &aa);    // 重載操作符==,比較兩個數組類是否相同    bool operator==(Array &aa);};#endif
Array.h
#include "iostream"#include "Array.h"using namespace std;Array::Array(int length){    if( length < 0 )    {        length = 0;    }        mLength = length;    mSpace = new int[mLength];}Array::Array(const Array& obj){    mLength = obj.mLength;        // 開闢mLength大小的記憶體空間mSpace    mSpace = new int[mLength];        for(int i=0; i<mLength; i++)    {        mSpace[i] = obj.mSpace[i];    }}int Array::length(){    return mLength;}void Array::setData(int index, int value){    mSpace[index] = value;}int Array::getData(int index){    return mSpace[index];}Array::~Array(){    mLength = -1;    delete[] mSpace;}int& Array::operator[](int i){    return this->mSpace[i];}Array& Array::operator=(Array &aa){    int i = 0;    if(this->mSpace != NULL)    {        free(mSpace);    }    this->mLength = aa.mLength;    mSpace = new int[mLength];        for(i=0; i<mLength; i++)    {        (*this)[i] = aa[i];    }    return (*this);}bool Array::operator==(Array &aa){    int i = 0;    if(this->mLength != aa.mLength)    {        return false;    }    for(i=0; i<this->mLength; i++)    {        if(mSpace[i] != aa.mSpace[i])        {            return false;        }    }    return true;}
Array.cpp
#include "iostream"#include "Array.h"using namespace std;int main(){    Array a1(10);       for(int i=0; i<a1.length(); i++)    {        //a1.setData(i, i);    //改寫[] 功能一        a1[i] = i;    }        for(int i=0; i<a1.length(); i++)    {        //printf("array %d: %d\n", i, a1.getData(i));        printf("array %d: %d\n", i, a1[i]);    }    Array a2 = a1;    Array a3(20);    a3 = a2;    // 重載操作符= 功能二    for(int i=0; i<a2.length(); i++)    {        //printf("array %d: %d\n", i, a2.getData(i));        printf("array %d: %d\n", i, a2[i]);    }    a1[9] = 1000;        if (a1==a2)    // 重載操作符== 功能三    {        cout << "兩個數組完全相等!"  << endl;    }    else    {        cout << "兩個數組不相等!" << endl;    }    return 0;}
ArrayText.cpp

重載操作符注意點:

1. 重載操作符有兩種方法:1> 用成員函數實現(大多數) 2> 用全域函數(友元函數)實現:當無法擷取到調用這個操作符的對象的源碼的時候,如:重載<<操作符

// 友元函數實現左移操作符,列印對象friend ostream &operator<<(ostream &out, Complex &cc);

2. 前置++(--)和後置++(--)注意點

//類成員函數實現前置++, 傳回值為自身的引用Complex &operator++()//類成員函數實現後置++, 傳回值為局部對象Complex operator++(int )

3. 特別注意:重載=或者是[]等操作符時,返回的是引用,只有引用可以當左值。還需注意的是,調用者的原本的指標域是否是空,不為空白則需釋放!

C++操作符重載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.