当前位置 博文首页 > liuguangshibei的博客:C++实验报告-3

    liuguangshibei的博客:C++实验报告-3

    作者:[db:作者] 时间:2021-08-13 12:52

    C++实验报告-3

    实验题目7

    【双目运算符和单目运算符的重载】

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

    说明:

    (1) 矩阵为2行3列,基类型为整型;

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

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

    提示:运算符重载一般遵循如下原则:

    (1)=、[]、()、->必须作为成员函数;

    (2)<<、>>、类型转换运算符必须作为友元函数;

    (3)一般将单目运算符和复合运算符重载为成员函数;

    (4)一般将双目运算符重载为友元函数。

    源代码:
    #include<iostream>
    #include<cstring>
    using namespace std;
    class Matrix
    {
    public:
    	Matrix();
    	Matrix(int* p);
    	friend istream& operator>>(istream& in, Matrix& t);
    	friend ostream& operator<<(ostream& out, const Matrix& t);
    	friend Matrix operator *(int, Matrix& s);
    	Matrix operator +(Matrix& c);
    	Matrix operator *(int);
    	Matrix operator++(int);
    	Matrix operator ++();
    private:
    	int iArray[2][3];
    };
    Matrix::Matrix() {};
    Matrix::Matrix(int* p)//一维数组遍历二维数组赋值
    {
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			iArray[i][j] = *p;
    			p++;
    		}
    
    	}
    }
    istream& operator>>(istream & in, Matrix & t)
    	{
    		for (int i = 0; i < 2; i++)
    		{
    			for (int j = 0; j < 3; j++)
    			{
    				cin >> t.iArray[i][j];
    			}
    		}
    		return in;
    	}
    ostream& operator<<(ostream& out, const Matrix& t)
    {
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			cout << t.iArray[i][j] << "  ";
    		}
    		cout << "\n" << endl;
    	}
    	return out;
    }
    Matrix Matrix::operator +(Matrix& c)
    {
    	Matrix a3;
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			a3.iArray[i][j] = iArray[i][j] + c.iArray[i][j];
    		}
    	}
    
    	return a3;
    }
    Matrix operator* (int a, Matrix& s)
    {
    	Matrix a4;
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			a4.iArray[i][j]= a * s.iArray[i][j];
    		}
    	}
    	return  a4;
    }
    Matrix Matrix::operator *(int k)
    {
    	Matrix a5;
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			a5.iArray[i][j] = k * iArray[i][j];
    		}
    	}
    	return  a5;
    }
    Matrix Matrix::operator++(int)
    {
    	Matrix t = *this;
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			this->iArray[i][j] = this->iArray[i][j] + 1;
    		}
    	}
    	return t;
    }
    Matrix Matrix::operator++()
    {
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			this->iArray[i][j] = this->iArray[i][j] + 1;
    		}
    	}
    	return *this;
    }
    int main()
    {
    	int c1[6] = { 1,2,3,4,5,6 };
    	int c2[6] = { 6,5,4,3,2,1 };
    	Matrix a(&c1[0]), b(&c2[0]);
    	Matrix c, e, d;
    	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;
    	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;
    
    }
    
    

    实验题目8

    【转换构造函数的使用】

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

    说明:

    (1) 矩阵为2行3列,基类型为整型;

    (2) 操作或运算:输出(<<)、标准类型(int)与矩阵对象相加(+)且满足交换律(使用转换构造函数完成)。加法规则说明:指整数与矩阵中每一个元素相加,相加结果为矩阵。

    源代码:
    #include<iostream>
    #include<cstring>
    using namespace std;
    class Matrix
    {
    public:
    	Matrix()
    	{
    		int i, j;
    		for (i = 0; i < 2; ++i)
    			for (j = 0; j < 3; ++j)
    				iArray[i][j] = 0;
    	}
    	Matrix(int t0, int t1, int t2, int t3, int t4, int t5);
    	Matrix(int);
    	friend Matrix operator +(Matrix, Matrix);
    	friend ostream& operator<<(ostream& out, const Matrix& t);
    private:
    	int iArray[2][3];
    };
    Matrix::Matrix(int t0,int t1, int t2, int t3, int t4, int t5)
    {
    	iArray[0][0] = t0;
    	iArray[0][1] = t1;
    	iArray[0][2] = t2;
    	iArray[1][0] = t3;
    	iArray[1][1] = t4;
    	iArray[1][2] = t5;
    }
    
    
    Matrix::Matrix(int k)
    {
    	for (int i = 0; i < 2; i++)
    		for (int j = 0; j < 3; j++)
    			iArray[i][j] = k;
    }
    
    Matrix operator +(Matrix c, Matrix w)
    {
    	Matrix a3;
    	for (int i = 0; i < 2; i++)
    		for (int j = 0; j < 3; j++)
    			a3.iArray[i][j] = c.iArray[i][j] + w.iArray[i][j];
    	return a3;
    }
    ostream& operator<<(ostream& out, const Matrix& t)
    {
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			cout << t.iArray[i][j] << "  ";
    		}
    		cout << "\n" << endl;
    	}
    	return out;
    }
    int main()
    {
    	Matrix a(1, 1, 1, 2, 3, 4), b, c;
    	int m = 2;
    	cout << "(1)测试:矩阵+数:" << endl;
    	cout << "矩阵a为:" << endl << a;
    	cout << "整数m为:" << m << endl;
    	cout << "a+m的结果为:" << endl;
    	b = a +m;
    	cout << b;
    
    	cout << "(2)测试:数+矩阵:" << endl;
    	cout << "矩阵a为:" << endl << a;
    	cout << "整数m为:" << m << endl;
    	cout << "m+a的结果为:" << endl;
    	c = m + a;
    	cout << c;
    	return 0;
    }
    
    

    实验题目9

    【类型转换函数】

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

    说明:

    (1) 矩阵为2行3列,基类型为整型;

    (2) 操作或运算:输出(<<)、标准类型(int)与矩阵对象相加且满足交换律(使用类型转换函数完成)。加法规则说明:指整数与矩阵中每一个元素相加, 相加结果为整数。

    源代码:
    #include<iostream>
    #include<cstring>
    using namespace std;
    class Matrix
    {
    public:
    	Matrix(int t0, int t1, int t2, int t3, int t4, int t5);
    	operator int();
    	friend ostream& operator<<(ostream& out, const Matrix& t);
    private:
    	int iArray[2][3];
    };
    Matrix::Matrix(int t0,int t1, int t2, int t3, int t4, int t5)
    {
    	iArray[0][0] = t0;
    	iArray[0][1] = t1;
    	iArray[0][2] = t2;
    	iArray[1][0] = t3;
    	iArray[1][1] = t4;
    	iArray[1][2] = t5;
    }
    Matrix::operator int()
    {
    	int i, j, sum = 0;
    	for (i = 0; i < 2; ++i)
    		for (j = 0; j < 3; ++j)
    			sum += iArray[i][j];
    	return sum;
    }
    ostream& operator<<(ostream& out, const Matrix& t)
    {
    	for (int i = 0; i < 2; i++)
    	{
    		for (int j = 0; j < 3; j++)
    		{
    			cout << t.iArray[i][j] << "  ";
    		}
    		cout << "\n" << endl;
    	}
    	return out;
    }
    int main()
    {
    	Matrix a(1, 1, 1, 2, 3, 4);
    	int m = 2 ,b, c;
    	cout << "(1)测试:矩阵+数:" << endl;
    	cout << "矩阵a为:" << endl << a;
    	cout << "整数m为:" << m << endl;
    	cout << "a+m的结果为:" << endl;
    	b = a +m;
    	cout << b<<endl;
    
    	cout << "(2)测试:数+矩阵:" << endl;
    	cout << "矩阵a为:" << endl << a;
    	cout << "整数m为:" << m << endl;
    	cout << "m+a的结果为:" << endl;
    	c = m + a;
    	cout << c;
    	return 0;
    }
    
    
    
    cs
    下一篇:没有了