c++学习笔记(十):运算符重载综合——自定义数组类

来源:互联网 发布:w3cschool mysql 编辑:程序博客网 时间:2024/06/11 06:01

通过几天的对运算符重载的学习,准备自定义一个数组类,并对一些运算符进行重载,话不多说上代码。

定义文件Array.h:

#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();public:int& operator[](int i);Array& operator=(Array &a1);bool operator==(Array &a2);bool operator!=(Array &a2);};//对符号[] = == !=进行重载#endif

业务实现文件Array.cpp:


#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;        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 mSpace[i];}/*//功能2Array a3(20);a3 = a1;*/Array& Array::operator=(Array &a1){int i = 0;if (this->mSpace != NULL){delete[] mSpace;this->mLength = 0;}//a1的所有元素赋给a3this->mLength = a1.mLength;this->mSpace = new int[a1.mLength];for (i=0; i<this->mLength; i++){mSpace[i] = a1[i];}return *this;}//功能3//if (a1 == a2)  //功能3bool Array::operator==(Array &a2){if (this->mLength != a2.mLength){return false;}for (int i=0; i<this->mLength; i++){if (this->mSpace[i] != a2[i]){return false;}}return true;}//if (a1 != a2) //功能4bool Array::operator!=(Array &a2){return !(*this == a2);}



测试代码:

int Test(){    Array a1(10);        for(int i=0; i<a1.length(); i++)    {a1[i] = i;//a1.operator [](i) = i;    }        for(int i=0; i<a1.length(); i++)    {    printf("array %d: %d\n", i, a1[i]);  //功能1    }        Array a2 = a1;        for(int i=0; i<a2.length(); i++)    {printf("array %d: %d\n", i, a2[i]);    }//功能2Array a3(20);a2 = a3 = a1;  //a3.operator=(a1);//a1.operator==(a2);if (a1 == a2)  //功能3{printf("相等\n");}else{printf("不相等\n");}if (a1 != a2) //功能4{printf("不相等\n");}else{printf("相等\n");}}


注意:正确运用引用当运算符重载的返回值及参数,前面已讲。

0 0
原创粉丝点击