数组的实现(重载[]、=、==、!=运算符重载)

.h文件

#ifndef PCH_H
#define PCH_H

// TODO: 添加要在此处预编译的标头
#include<iostream>
using namespace std;

class myArray
{
public:
    myArray(int length);
    myArray(const myArray& objs);
    ~myArray();

    void setData(int index, int value);
    int getData(int index);
    int length();
    int& operator[](int i);
    myArray& operator=(myArray &a1);
    bool operator==(myArray &a1);
    bool operator!=(myArray &a1);
protected:
    int m_length;
    int *m_space;

};

#endif //PCH_H

 

 

.cpp文件

// pch.cpp: 与预编译标头对应的源文件;编译成功所必需的

#include "pch.h"

// 一般情况下,忽略此文件,但如果你使用的是预编译标头,请保留它。
myArray::myArray(int length)
{
    if (length < 0) {
        length = 0;
    }

    m_length = length;
    m_space = new int[m_length];
}

//拷贝构造 myArray a2 = a1 
myArray::myArray(const myArray& obj)
{
    this->m_length = obj.m_length;
    this->m_space = new int[this->m_length];

    for (int i = 0; i < m_length; i++) {
        this->m_space[i] = obj.m_space[i];
    }
}
myArray::~myArray()
{
    if (m_space != NULL) {
        delete m_space;
        m_space = NULL;
        m_length = -1;
    }
}

void myArray::setData(int index, int value)
{
    m_space[index] = value;
}
int myArray::getData(int index)
{
    return m_space[index];
}
int myArray::length()
{
    return m_length;
}

int& myArray::operator[](int i)//同时当左右值
{
    return m_space[i];
}

//a3 = a1;
myArray& myArray::operator=(myArray &a1)
{
    if (m_space != NULL) {
        delete []m_space;
        //this->m_space = NULL;
        m_length = 0;
    }

    m_length = a1.m_length;
    m_space = new int[m_length];

    for (int i = 0; i < m_length; i++) {
        m_space[i] = a1[i];//m_space[i] = a1.m_space[i];
    }
    return *this;
}

bool myArray::operator==(myArray &a1)
{
    if (m_length != a1.m_length) {
        return false;
    }
    for (int i = 0; i < m_length; i++) {
        if (m_space[i] != a1[i]) {
            return false;
        }
    }
    return true;
}

bool myArray::operator!=(myArray &a1) {
    /*if (m_length != a1.m_length) {
        return true;
    }
    for (int i = 0; i < m_length; i++) {
        if (m_space[i] == a1[i]) {
            return false;
        }
    }
    return true;*/
    if (*this == a1) {
        return false;
    }
    else {
        return true;
    }
}

 

 

 

业务应用main.c

#include "pch.h"
#include <iostream>

int main()
{
    myArray a1(10);
    for (int i = 0; i < a1.length(); i++) {
        a1.setData(i, i);
        a1[i] = i;//a1.operator[i] 函数返回值当左值,要返回引用  //int& operator[](int i)
    }

    cout << "\n打印数据a2:" << endl;
    myArray a2 = a1;
    for (int i = 0; i < a2.length(); i++) {
        //cout << a2.getData(i) << " ";
        cout << a2[i] << " ";//int operator[](int i)
    }
    cout << endl;

    myArray a3(5);
    a3 = a1;//a3.operator=(a1)//myArray& operator=(myArray &a1)
    a3 = a2 = a1;

    cout << "\n打印数据a3:" << endl;
    for (int i = 0; i < a3.length(); i++) {
        //cout << a2.getData(i) << " ";
        cout << a3[i] << " ";//int operator[](int i)
    }
    cout << endl;
    
    myArray a4(5);
    if (a3 == a1) {//a3.operator==(a1) //bool operator==(myArray &a1)
        cout << "相等" << endl;
    }
    
    if (a4 != a1) {//a4.operator!=(a1) //bool operator!=(myArray &a1)
        cout << "不相等" << endl;
    }
    cout << endl;
    std::cout << "Hello World!\n"; 
}

 

posted @ 2019-03-23 15:26  星星之火可以燎源  阅读(707)  评论(0编辑  收藏  举报