模拟重写数组类

本文介绍了一个使用C++实现的动态数组类(Array),包括类的设计思路、成员函数的功能及其实现细节。该类支持输入输出操作符重载、赋值运算符重载、比较运算符重载等特性,并提供了下标运算符来访问数组元素。
摘要由CSDN通过智能技术生成

//数组头文件:Array.h

#ifndef ARRAR_H
#define ARRAR_H

#include<iostream>
using namespace std;
class Array{
private:
    int size;
    int *ptr;
public:

    friend istream &operator>>(istream &,Array &);
    friend ostream &operator<<(ostream &,const Array &);
    Array(int =3);
    Array (const Array &);
    ~Array();
    int getsize()const;
    const Array &operator=(const Array &);
    bool operator ==(const Array &)const;
    bool operator!=(const Array &r)const{
        return !(*this==r);
    }
    int &operator[](int);
    int operator[](int)const;
};

#endif // ARRAR_H_INCLUDED
//实现Array.cpp

#include<iostream>
#include "Array.h"
#include<iomanip>
#include<cstdlib>
using namespace std;
Array::Array(int s)
{
    size=(s>0?s:3);
    ptr=new int[size];
    for(int i=0; i<size; i++)
        ptr[i]=0;
}
Array::Array(const Array &a):size(a.size)
{
    ptr=new int[size];
    for(int i=0; i<size; i++)
        ptr[i]=a.ptr[i];
}
Array::~Array()
{
    delete []ptr;
}
int Array::getsize()const
{
    return size;
}
const Array &Array::operator=(const Array & a)
{
    if(&a!=this)
    {
        if(size!=a.size)
        {
            delete []ptr;
            size=a.size;
            ptr=new int[size];
        }
        for(int i=0; i<size; i++)
            ptr[i]=a.ptr[i];

    }
    return *this;
}
bool Array::operator ==(const Array &a)const
{
    if(size!=a.getsize())
        return false;
    for(int i=0; i<size; i++)
        if(ptr[i]!=a.ptr[i])
            return false;
    return true;
}
int &Array::operator[](int a)
{
    if(a<0||a>size)
    {
        cout<<"out of range error"<<endl;
        exit(1);
    }
    return ptr[a];
}
int Array::operator[](int a)const
{
    if(a<0||a>size)
    {
        cout<<"out of range error"<<endl;
        exit(1);
    }
    return ptr[a];
}
 istream &operator>>(istream &input,Array &a)
 {
     for(int i=0;i<a.size;i++)
        input>>a.ptr[i];
     return input;
 }
ostream &operator<<(ostream &output,const Array &a)
{
    for(int i=0;i<a.size;i++)
       {
           output<<setw(12)<<a.ptr[i];
           if(i%4==0&&i!=0)
            output<<endl;
       }
       return output;

}


//调用 main.cpp
#include <iostream>
#include <fstream>
#include <cstring>
#include"Array.h"
using namespace std;


int main()
{
   
    Array a(4);
    Array b;
    cout<<a.getsize()<<endl;
    cin>>a>>b;
    cout<<"a:"<<a<<endl;
    cout<<"b:"<<b<<endl;
    cout<<"a==b?"<<(a==b)<<endl;
    cout<<"a!=b?"<<(a!=b)<<endl;
    cout<<"a=b"<<(a=b)<<endl<<"a:"<<a<<endl;
    cout<<"a==b?"<<(a==b)<<endl;


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值