双目运算符和单目运算符的重载(中北大学-程序设计基础(2))

目录

题目

源码

结果示例


题目

建立一个矩阵类,可以完成指定的操作或运算。

说明:

  1. 矩阵为2行3列,基类型为整型;
  2. 操作或运算:初始化(>>)、输出(<<)、赋值(=)、两个同类型矩阵的相加(+)、矩阵前置自增(++,即所有元素都加1)、矩阵后置自增(++,即所有元素都加1)、一个整数乘矩阵(*,即该整数乘以每个元素)、矩阵乘一个整数(*,即每个元素乘以该整数)。

要求:针对矩阵的各种操作,请先确认使用何种类型函数实现(仅限于成员函数、友元函数,暂不使用转换构造函数和类型转换函数)。

提示:运算符重载一般遵循如下原则:(1)=、[]、()、->必须作为成员函数;(2)<<、>>、类型转换运算符必须作为友元函数;(3)一般将单目运算符和复合运算符重载为成员函数;(4)一般将双目运算符重载为友元函数。

可以利用如下测试函数进行验证:

int main()
{
	Matrix a(1,2,3,4,5,6),b(6,5,4,3,2,1),c,d,e;
	int a1=2,a2=3;//用于测试数乘运算时用到的整数
	//(1)测试:>>,输入a和b
		//a的值如下:
		//	1	1	1
		//	2	2	2
		//b的值如下:
		//	3	2	1
		//	6	5	4
	cout<<"请输入a和b"<<endl;
	cin>>a>>b;
	cout<<"--------------------------"<<endl;

	//(2)测试:<<,输出a和b
		//输出结果格式:
		//a的值如下:(b与a类似)
		//	1 1 1
		//	2 2 2
	cout<<"a的值如下:"<<endl;
	cout<<a<<endl;
	cout<<"b的值如下:"<<endl;
	cout<<b<<endl;
	cout<<"--------------------------"<<endl;
	
	//(3)测试:+,并输出a+b的结果
	cout<<"a+b的结果如下:"<<endl;
	cout<<a+b<<endl;
	cout<<"--------------------------"<<endl;
	
	//(4)测试:=,将a赋给c,并输出c
	cout<<"执行c=a之后,c的值如下:"<<endl;
	c=a;
	cout<<c;
	cout<<"--------------------------"<<endl;

	//(4)测试:整数左乘矩阵,计算a1*c并输出
	cout<<"测试整数左乘矩阵"<<endl;
	cout<<"整数为:"<<a1<<endl;
	cout<<"矩阵为:"<<endl<<c;
	cout<<"整数左乘矩阵结果如下:"<<endl;
	cout<<a1*c;
	cout<<"--------------------------"<<endl;
	
	//(5)测试:整数右乘矩阵,计算c*a2并输出
	cout<<"测试整数右乘矩阵"<<endl;
	cout<<"整数为:"<<a2<<endl;
	cout<<"矩阵为:"<<endl<<c;
	cout<<"整数右乘矩阵结果如下:"<<endl;
	cout<<c*a2;
	cout<<"--------------------------"<<endl;

	//(6)测试:前置自增++,计算d=++c并输出
	cout<<"测试前置自增++"<<endl;
	cout<<"c的初始值如下:"<<endl;
	cout<<c;
	cout<<"d=++c执行之后结果如下:"<<endl;
	d=++c;
	cout<<"c的结果如下:"<<endl;
	cout<<c;
	cout<<"d的结果如下:"<<endl;
	cout<<d;
	cout<<"--------------------------"<<endl;

	//(7)测试:后置自增++,计算e=c++并输出
	cout<<"测试后置自增++"<<endl;
	cout<<"c的初始值如下:"<<endl;
	c=a;
	cout<<c;
	cout<<"e=c++执行之后结果如下:"<<endl;
	e=c++;
	cout<<"c的结果如下:"<<endl;
	cout<<c;
	cout<<"e的结果如下:"<<endl;
	cout<<e;
	cout<<"--------------------------"<<endl;
	return 0;
}

源码

#include <iostream>

using namespace std;

class Matrix
{
private:
	int matrix[2][3];

public:
	Matrix(int a = 0, int b = 0, int c = 0, int d = 0, int e = 0, int f = 0)
	{
		matrix[0][0] = a;
		matrix[0][1] = b;
		matrix[0][2] = c;
		matrix[1][0] = d;
		matrix[1][1] = e;
		matrix[1][2] = f;
	}

	friend istream& operator>>(istream& in, Matrix& m);
	friend ostream& operator<<(ostream& out, const Matrix& m);

	Matrix operator+(const Matrix& other);
	Matrix operator*(int num);
	friend Matrix operator*(int num, const Matrix& m);

	Matrix& operator=(const Matrix& other);
	Matrix& operator++();
	Matrix operator++(int);
};

istream& operator>>(istream& in, Matrix& m)
{
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			in >> m.matrix[i][j];
		}
	}
	return in;
}

ostream& operator<<(ostream& out, const Matrix& m)
{
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			out << m.matrix[i][j] << " ";
		}
		out << endl;
	}
	return out;
}

Matrix Matrix::operator+(const Matrix& other)
{
	Matrix result;
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			result.matrix[i][j] = matrix[i][j] + other.matrix[i][j];
		}
	}
	return result;
}

Matrix Matrix::operator*(int num)
{
	Matrix result;
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			result.matrix[i][j] = matrix[i][j] * num;
		}
	}
	return result;
}

Matrix operator*(int num, const Matrix& m)
{
	Matrix result;
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			result.matrix[i][j] = m.matrix[i][j] * num;
		}
	}
	return result;
}

Matrix& Matrix::operator=(const Matrix& other)
{
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			matrix[i][j] = other.matrix[i][j];
		}
	}
	return *this;
}

Matrix& Matrix::operator++()
{
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			matrix[i][j]++;
		}
	}
	return *this;
}

Matrix Matrix::operator++(int)
{
	Matrix temp = *this;
	++(*this);
	return temp;
}

int main()
{
	Matrix a(1, 2, 3, 4, 5, 6), b(6, 5, 4, 3, 2, 1), c, d, e;
	int a1 = 2, a2 = 3;//用于测试数乘运算时用到的整数
	//(1)测试:>>,输入a和b
		//a的值如下:
		//	1	1	1
		//	2	2	2
		//b的值如下:
		//	3	2	1
		//	6	5	4
	cout << "请输入a和b" << endl;
	cin >> a >> b;
	cout << "--------------------------" << endl;

	//(2)测试:<<,输出a和b
		//输出结果格式:
		//a的值如下:(b与a类似)
		//	1 1 1
		//	2 2 2
	cout << "a的值如下:" << endl;
	cout << a << endl;
	cout << "b的值如下:" << endl;
	cout << b << endl;
	cout << "--------------------------" << endl;

	//(3)测试:+,并输出a+b的结果
	cout << "a+b的结果如下:" << endl;
	cout << a + b << endl;
	cout << "--------------------------" << endl;

	//(4)测试:=,将a赋给c,并输出c
	cout << "执行c=a之后,c的值如下:" << endl;
	c = a;
	cout << c;
	cout << "--------------------------" << endl;

	//(4)测试:整数左乘矩阵,计算a1*c并输出
	cout << "测试整数左乘矩阵" << endl;
	cout << "整数为:" << a1 << endl;
	cout << "矩阵为:" << endl << c;
	cout << "整数左乘矩阵结果如下:" << endl;
	cout << a1 * c;
	cout << "--------------------------" << endl;

	//(5)测试:整数右乘矩阵,计算c*a2并输出
	cout << "测试整数右乘矩阵" << endl;
	cout << "整数为:" << a2 << endl;
	cout << "矩阵为:" << endl << c;
	cout << "整数右乘矩阵结果如下:" << endl;
	cout << c * a2;
	cout << "--------------------------" << endl;

	//(6)测试:前置自增++,计算d=++c并输出
	cout << "测试前置自增++" << endl;
	cout << "c的初始值如下:" << endl;
	cout << c;
	cout << "d=++c执行之后结果如下:" << endl;
	d = ++c;
	cout << "c的结果如下:" << endl;
	cout << c;
	cout << "d的结果如下:" << endl;
	cout << d;
	cout << "--------------------------" << endl;

	//(7)测试:后置自增++,计算e=c++并输出
	cout << "测试后置自增++" << endl;
	cout << "c的初始值如下:" << endl;
	c = a;
	cout << c;
	cout << "e=c++执行之后结果如下:" << endl;
	e = c++;
	cout << "c的结果如下:" << endl;
	cout << c;
	cout << "e的结果如下:" << endl;
	cout << e;
	cout << "--------------------------" << endl;
	return 0;
}

结果示例

9bdffed78fb44e4895690cf5989d15e7.png5053a6146c324a2e9734fec094d70a8a.png

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Li-Shan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值