实验九运算符重载

用成员函数实现运算符 “+”、“-”、“++”、“–”和”[ ]”的重载。
(1)实现将两个二维数组相加、相减。其中第一个数组的值由构造函数设置,第二个数组由键盘输入。
(2)数组能进行自增和自减运算。前”++”、“–”和后”++”、 “–”都要分别实现。数组通过构造函数设置
(3)实现数组和一个整数相加、相减。数组和整数都采取键盘输入。
(4)实现下标运算符重载。根据键盘输入i,j来访问数组中的值。
提示:
(1)定义一个类,类里面有一个私有数据成员(二维数组)。
(2)类里面含有一个有参数的构造函数,用于对二维数组赋值。
(3)类中包含一个无参构造函数,用于键盘输入对数组赋值时,定义对象。
(4)类中有一个input()函数,用于通过键盘输入赋值。
(5)类中有show()函数,用于显示二维数组。

#include
#include
using namespace std;

class Array
{
public:
	Array(int a[][3]);  //有参构造函数 
	Array()  //无参构造函数 对无参对象分配空间 使对象能调用input为数组赋值
	{}
	void intput(); //输入数组
	void show();  //打印数组
	Array operator +(Array a);//重载+运算符 使两个数组能相加
	Array operator -(Array a);//重载-运算符 使两个数组能相减
	Array operator --();//重载++前置自增运算符 使数组能进行前置自减
	Array operator ++();//重载--前置自减运算符 使数组能进行前置自增
	Array operator --(int ); //重载++后置运算符 使数组能进行后置自增
	Array operator ++(int );//重载--后置运算符  使数组能进行后置自减
	Array operator +(int a);//重载+运算符  使数组能与整数相加
	Array operator -(int a);//重载+运算符  使数组能与整数相减
	int * operator[](int a);//重载[]运算符  使对象能通过下标直接访问数组元素

private:
	int arr[3][3];
};
//********************************************************
Array::Array(int a[][3])
{
	int i, j;
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
		{
			arr[i][j] = a[i][j];
		}
}
void Array::intput()
{
	int i, j;
	cout << "请输入一个3*3数组" << endl;
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
		{
			cin >> arr[i][j];
		}
}
void Array::show()
{
	int i, j;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			cout << arr[i][j] << "\t";
		}
		cout << endl;
	}
	
}
Array Array::operator +(Array a)
{
	Array temp;
	int i, j;
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
		{
			temp.arr[i][j] = arr[i][j] + a.arr[i][j];
		}
	return temp;
}
Array Array  ::operator- (Array a2)
{
	Array temp;
	int i, j;
	for (i = 0;i<3; i++)
		for (j = 0;j<3; j++)
		{
			temp.arr[i][j] = arr[i][j] - a2.arr[i][j];
		}
	return temp;
}
Array Array::  operator -- ()
{
	int i, j;

	for (i = 0;i<3; i++)
		for (j = 0;j<3;j++)
		{
		--arr[i][j];
		}
	return * this ;
}
Array Array::operator++()
{
	int i, j;
	for (i = 0; i < 3; i++)
		for (j = 0; j< 3; j++)
		{
			++arr[i][j];
		}
	return *this;
}
Array Array::  operator -- (int)
{
	int i, j;

	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
		{
			--arr[i][j];
		}
	return *this;
}
Array Array::operator++(int)
{
	int i, j;
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
		{
			++arr[i][j];
		}
	return *this;
}
Array Array::operator +(int a)
{
	Array temp;
	int i, j;
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
		{
			temp.arr[i][j] = arr[i][j] +a;
		}
	return temp;
}
Array Array::operator -(int a)
{
	Array temp;
	int i, j;
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
		{
			temp.arr[i][j] = arr[i][j] - a;
		}
	return temp;
}
int *Array::operator[](int a)
{
	return  arr[a];
}
//**********************************************************
int main()
{
	//调用有参构造为对象赋初值
	int arr[][3] = {1,2,5,8,6,5,7,4,6};
	Array a1(arr);
	a1.show();

	//调用无参构造为对象赋值
	Array a2;
	a2.intput();

	//数组对象相加
	Array a3;
	a3 = a1 + a2; //a3 = a1.operator+(a2);
	cout << "两个数组和为:"<> t;
	a9 = a9 + t;
	cout << "相加后为:" << endl;
	a9.show();
	cout << endl;
	
	a10 = a10 - t;
	cout << "相减后为:" << endl;
	a10.show();
	cout << endl;

	//输入下标 访问数组元素
	int i, j;
	a1.show();
	cout << "请输入想要访问的数组下标" << endl;
	while (true)
	{
		cin >> i >> j;
		if (i >= 0 && i < 3 && j >= 0 && j < 3)
		{
			printf("array[%d][%d]=",i,j);
			cout << a1[i][j] << endl;
			exit(1);
		}
		else 
		{
			cout << "输入下标有误,请重新输入" << endl;
		}
	}		
	return 0;
}

你可能感兴趣的:(学校实验)