实验九运算符重载

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

#include<iostream>
#include<stdlib.h>
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 << "两个数组和为:"<<endl;
	a3.show();
	cout << endl;
	//数组对象相减
	Array a4;
	a4 = a1 - a2; //a3 = a1.operator-(a2);
	cout << "两个数组差为:"<<endl;
	a4.show();
	cout << endl<<"-----------------"<<endl;
	//数组对象前置自减
	Array a5;
	a5 = a1;
	a1.show();
	cout << "前置自减后为:"<<endl;
	a5=--a5;
	a5.show();
	cout << endl;
	//数组对象前置自增
	Array a6;
	a6 = a1;
	a1.show();
	cout << "前置自增后为:" << endl;
	++a6;
	a6.show();
	cout << endl;
	//数组对象后置自减
	Array a7;
	a7 = a1;
	a1.show();
	cout << "后置自减后为:" << endl;
	a7 = --a7;
	a7.show();
	cout << endl;
	//数组对象后置自增
	Array a8;
	a8 = a1;
	a8.show();
	cout << "后置自增后为:" << endl;
	++a8;
	a8.show();
	cout << endl<<"-----------"<<endl;

	//数组与整数相加减
	Array a9;	Array a10;  int t;
	a9.intput();
	a10 = a9;
	cout << "请输入要相加减的整数" << endl;
	cin >> 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值