zoukankan      html  css  js  c++  java
  • C++ 运算符重载四(自定义数组类)

    //自定义数组类
    #include<iostream>
    using namespace std;
    
    //分析:能获取数组长度,添加元素,删除元素,修改元素
    //要求重载[],=,==,!=运算符
    
    class MyArray
    {
    private:
        int mLength;
        int* mSpace;
    
    public:
        MyArray(int length){
            cout << "有参构造函数被调用了1" << endl;
            mLength = length;
            mSpace = new int[mLength];
            memset(mSpace, 0, sizeof(int)*mLength);
        }
        MyArray(const MyArray& obj){
            cout << "拷贝构造函数被调用了2" << endl;
            mLength = obj.mLength;
            mSpace = new int[mLength];
            int i = 0;
            for (i = 0; i < mLength; i++)
            {
                mSpace[i] = obj.mSpace[i];
            }
        }
        int length(){
            return mLength;
        }
        void setData(int index, int value){
            if (index>(mLength-1))
            {
                cout << "数组越界!" << endl;
                return;
            }
            mSpace[index] = value;
        }
        int getData(int index){
            if (index>(mLength - 1))
            {
                cout << "数组越界!" << endl;
                return 0;
            }
            return mSpace[index];
        }
        void PrintfA(){
            for (int i = 0; i < mLength; i++)
            {
                cout << ""<<i<<"个元素是" << mSpace[i] << endl;
            }
        }
        ~MyArray(){
            cout << "析构函数被调用了3" << endl;
            if (mSpace!=NULL)
            {
    
                delete[] mSpace;
            }
            mLength = 0;
        }
    public:
        //[]操作符重载
        int & operator[](int num){
            if (num>(mLength-1))
            {
                cout << "数组越界!" << endl;
                return mSpace[mLength - 1];
            }
            return mSpace[num];
        }
        //=操作符重载
        MyArray & operator=(MyArray &obj){
            mLength = obj.mLength;
            if (mSpace==NULL)
            {
                mSpace = new int[mLength];
            }
            else{
                //释放原来的数组内存
                delete[] mSpace;
                mSpace = new int[mLength];
            }
            int i = 0;
            for (i = 0; i < mLength; i++)
            {
                mSpace[i] = obj.mSpace[i];
            }
            return *this;
        }
        //==操作符重载
        bool operator==(MyArray &myarr){
            bool flag = true;
            if (mLength != myarr.mLength)
            {
                flag = false;
                return flag;
            }
            for (int i = 0; i < mLength; i++)
            {
                if (mSpace[i] != myarr.mSpace[i])
                {
                    flag = false;
                    break;
                }
            }
            return flag;
        }
        //!=操作符重载
        bool operator!=(MyArray &myarr){
            bool flag = false;
            if (mLength == myarr.mLength)
            {
                for (int i = 0; i < mLength; i++)
                {
                    if (mSpace[i] != myarr.mSpace[i])
                    {
                        flag = true;
                        break;
                    }
                }
            }
            else{
                flag = true;
            }
            return flag;
        }
    
    };
    
    void ProtectA(){
        MyArray arr(10);
        arr.PrintfA();
        //arr[10];  arr[10]=2;
        //根据需求推理出参数列表是Int  返回值是int &
        //int & arr.operator[](int num)
        arr[5]=5;
        arr.PrintfA();
        //arr1=arr;  赋值操作
        //分析可知:函数名operator=()  ;操作数 2个(不涉及系统类库)arr.operator=(MyArray &arr1) 
        //因为存在 arr1=arr2=arr3; 所以返回值MyArray & ;结果:MyArray & operator=(MyArray &arr1) 
        MyArray arr2(5);
        arr2[0] = 1;
        arr2[2] = 1;
        arr2[3] = 1;
        arr2[4] = 1;
        arr2[1] = 1;
        arr = arr2;
        arr.PrintfA();
    
        
    }
    
    void ProtectB(){
        //arr1==arr;  判断是否相等
        //分析 :函数名 operator==(), 有2个操作数  arr1.operator==(arr)  返回值:判断是否相等 那么肯定返回bool值
        //结果:bool operator==(MyArray &myarr)
        MyArray arr1(3), arr2(5);
        if (arr1 == arr2)
        {
            cout << "这两个数组相等" << endl;
        }
        else{
            cout << "这两个数组不相等" << endl;
        }
        if (arr1 != arr2)
        {
            cout << "这两个数不组相等" << endl;
        }
        else{
            cout << "这两个数组相等" << endl;
        }
    }
    
    void main(){
        ProtectB();
        system("pause");
    }
  • 相关阅读:
    WCF和SOA的简介
    .NET 反射应用
    ASP.NET---如何使用web api创建web服务
    获得N位数字字母随机组合
    git的初步使用
    js贪吃蛇
    python多线程
    2013-12-13
    2012-12-12
    2013-12-5
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5625066.html
Copyright © 2011-2022 走看看