当前位置 博文首页 > liuguangshibei的博客:C++实验报告-3
【双目运算符和单目运算符的重载】
建立一个矩阵类,可以完成指定的操作或运算。
说明:
(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;
}
【转换构造函数的使用】
建立一个矩阵类,可以完成指定的操作或运算。
说明:
(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;
}
【类型转换函数】
建立一个矩阵类,可以完成指定的操作或运算。
说明:
(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