//源程序来自《C++ 程序员教程》
#ifndef ARRAY_H
#define ARRAY_H
#include<iostream>
using std::ostream;
using std::istream;
class Array
{
friend ostream &operator<<(ostream &,const Array &);
friend istream &operator>>(istream &,Array &);
public:
Array(int =10);//默认构造函数
Array(const Array&);//拷贝构造函数
~Array();//析构函数
int getSize() const;// 返回数组大小
const Array &operator=(const Array&);
bool operator==(const Array&)const;
bool operator!=(const Array& right)const
{
return !(*this==right);
}
int &operator[](int);
int operator[](int)const;
private:
int size;
int* ptr;
};
#endif
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::cerr;
#include<iomanip>
using std::setw;
#include<cstdlib>
using std::exit;
#include "Array.h"
Array::Array(int arraySize)
{
size=(arraySize>0?arraySize:10);
ptr=new int[size];
for(int i=0;i<size;i++)
{
ptr[i]=0;
}
}
Array::Array(const Array &arraySource)
:size(arraySource.size)
{
ptr=new int[size];
for(int i=0;i<size;i++)
{
ptr[i]=arraySource.ptr[i];
}
}
Array::~Array()
{
delete []ptr;
}
int Array::getSize() const
{
return size;
}
const Array &Array::operator =(const Array &right)
{
if(&right!=this)
{
if(size!=right.size)
{
delete[] ptr;//释放空间
size=right.size;
ptr=new int[size];
}
for(int i=0;i<size;i++)
{
ptr[i]=right.ptr[i];
}
}
return *this;
}
bool Array::operator ==(const Array &right) const
{
if(size!=right.size)
{
return false;
}
for(int i=0;i<size;i++)
{
if(ptr[i]!=right.ptr[i])
{
return false;
}
}
return true;
}
int &Array::operator [](int subscript)
{
if(subscript<0||subscript>=size)
{
cerr<<"\nError:Subscript "<<subscript
<<"out of range"<<endl;
exit(1);
}
return ptr[subscript];
}
int Array::operator [](int subscript)const
{
if(subscript<0||subscript>=size)
{
cerr<<"\nError:Subscript "<<subscript
<<"out of range"<<endl;
exit(1);
}
return ptr[subscript];
}
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)
{
int i;
for(i=0;i<a.size;i++)
{
output<<setw(12)<<a.ptr[i];
if((i+1)%4==0)
output<<endl;
}
if(i%4==0)
output<<endl;
return output;
}
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
#include "Array.h"
int main()
{
Array integer1(7);
Array integer2;
cout<<"数组1的长度是:"<<integer1.getSize()<<endl;
cout<<"输入17个数:"<<endl;
cin>>integer1>>integer2;
cout<<"\ninteger1="<<integer1;
cout<<"\ninteger2="<<integer2;
if(integer1!=integer2)
cout<<"不相等"<<endl;
Array integer3(integer1);
cout<<"数组3的长度是:"<<integer3.getSize()<<endl;
cout<<"\nAssigning integer2 to integer1:"<<endl;
integer1=integer2;
if(integer1==integer2)
cout<<"相等"<<endl;
cout<<"integer1[5]"<<integer1[5]<<endl;
cout<<integer1<<endl;
return 0;
}