重学C++ 带重载运算符的Array

//源程序来自《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;
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值