⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array.cpp

📁 运算符重载数组的整体输入与输出
💻 CPP
字号:
//array.cpp
//定义类Array的成员函数
#include <iostream.h>
#include <stdlib.h>
#include <assert.h>
#include "array.h"

//初始化文件作用域内的静态数据成员
int Array:: arrayCount=0;	//还没有对象

//返回实例化的数组对象的个数
int Array:: getArrayCount()	{return arrayCount;}

//类Array的构造函数
Array:: Array(int arraySize)
{
	++arrayCount;	//对象计算加1
	size=arraySize;	//默认数组的大小为10w
	ptr=new int[size];	//为数组分配内存空间
	assert(ptr!=0);	//内存分配不成功时中止

	for(int i=0; i<=size-1; i++)
		ptr[i]=0;	//对数组进行初始化
}

//类Array的拷贝函数
Array:: Array(const Array &init)
{
	++arrayCount;	//对象计数加1
	size=init.size;	//指定对象的大小
	ptr=new int[size];	//为数组分配内存空间
	assert(ptr!=0);	//内存分配不成功时中止

	for(int i=0; i<=size-1; i++)
		ptr[i]=init.ptr[i];	//把初始化值拷贝到对象中
}

//析构函数
Array:: ~Array()
{
	--arrayCount;	//对象计数减1
	delete []ptr;	//回收分配给数组的内存空间
}

//获取数组的大小
int Array:: getSize() const {return size;}

//重载下标运算符
int &Array:: operator[](int subscript)
{
	//检测下标越界错误
	assert(0<=subscript&&subscript<size);
	return ptr[subscript];	//返回的引用可用作左值
}

//判断两个数组是否相等。若相等,返回1,否则返回0
int Array:: operator==(const Array &right) const
{
	if(size!=right.size)
		return 0;	//数组的大小不相等
	for(int i=0; i<=size-1; i++)
		if(ptr[i]!=right.ptr[i])
			return 0;	//数组不相等

	return 1;	//数组相等
}

//判断两个数组是否不相等。若不相等,返回1,否则返回0
int Array:: operator!=(const Array &right) const
{
	if(size!=right.size)
		return 1;	//数组的大小不相等
	for(int i=0; i<=size-1; i++)
		if(ptr[i]!=right.ptr[i])
			return 1;	//数组不相等

	return 0;	//数组相等
}

//重载赋值运算符
const Array &Array:: operator= (const Array &right)
{
	if(&right!=this){	//检查是否是自我赋值
		delete []ptr;	//回收内存空间
		size=right.size;	//指定对象的大小
		ptr=new int[size];	//为数组拷贝分配内存空间
		assert(ptr!=0);	//内存分配不成功时中止

		for(int i=0; i<=size-1; i++)
			ptr[i]=right.ptr[i];	//把数组拷贝到对象中
	}

	return *this;	//使得能连续执行x=y=z;
}

//重载用于类Array输入输出运算符,为整个数组赋值
istream &operator>> (istream &input, Array &a)
{
	for(int i=0; i<=a.size-1; i++)
		input>>a.ptr[i];
	return input;	//使得能连续执行cin>>x>>y;
}

//重载用于类Array的输出运算符
ostream &operator<< (ostream &output, const Array &a)
{
	for(int i=0; i<=a.size-1; i++){
		output<<a.ptr[i]<<' ';

		if((i+1)%10==0)
			output<<endl;
	}

	return output;	//使得能连续执行cout<<x<<y;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -