【C++之运算符重载1】复数类 Complex 重载运算符 “+”
上一篇博客利用重载运算符 “+”,实现了两个复数以及复数与实数的和。
题目要求
有两个矩阵 a 和 b,均为2行3列。求两个矩阵之和。重载运算符 “+” ,使之能用于矩阵相加。如 c = a + b 。
——谭浩强的《C++面向对象程序设计》第4章习题第4小题
在第4题的基础上,重载流插入运算符 “<<” 和流提取运算符 “>>” ,使之能用于该矩阵的输入和输出。
——谭浩强的《C++面向对象程序设计》第4章习题第5小题
程序4-4
/*
*************************************************************************
@file: main.cpp
@date: 2020.12.3
@author: Xiaoxiao
@brief: 矩阵相加 重载运算符 " + "
@blog: https://blog.csdn.net/weixin_43470383/article/details/110562970
*************************************************************************
*/
#include <iostream>
using namespace std;
class Matrix
{
public:
Matrix(); // 声明默认构造函数
void input();
void display();
friend Matrix operator + (Matrix&, Matrix&); // 声明重载运算符"+"的友元函数
private:
int mat[2][3]; // 2×3 矩阵
};
Matrix::Matrix() // 定义默认构造函数
{
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
mat[i][j] = 0;
}
Matrix operator + (Matrix &a, Matrix &b) // 定义重载运算符"+"的友元函数
{
Matrix c;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
c.mat[i][j] = a.mat[i][j] + b.mat[i][j];
return c;
}
void Matrix::input()
{
cout << "pls input 2×3 matrix" << endl;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
cin >> mat[i][j];
}
void Matrix::display()
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << mat[i][j] << " ";
}
cout << endl;
}
}
int main()
{
Matrix a, b, c;
cout << "Matrix a:" << endl;
a.input();
cout << "Matrix b:" << endl;
b.input();
cout << "Matrix c = Matrix a + Matrix b" << endl;
c = a + b;
c.display();
system("pause");
return 0;
}
运行结果4-4
Matrix a:
pls input 2×3 matrix
7 9 8
6 2 4
Matrix b:
pls input 2×3 matrix
1 3 5
8 5 2
Matrix c = Matrix a + Matrix b
8 12 13
14 7 6
流插入和流提取运算符重载
如果想要输入和输出用户自己声明的类型的数据,必须对 “<< ” 和 “>>” 进行重载。
只能将重载 “<< ” 和 “>>” 的函数作为友元函数,而不能将它们定义为成员函数。
对 “<<” 和 “>>” 重载的函数形式如下:
istream & operator >> (istream &, 自定义类 &)
ostream & operator << (ostream &, 自定义类 &)
例如:
friend istream & operator >> (istream &in, Matrix &m) // 定义重载运算符"<<"的友元函数
{
cout << "pls input 2×3 matrix" << endl;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
in >> m.mat[i][j];
return in;
}
friend ostream & operator << (ostream &out, Matrix &m) // 定义重载运算符"<<"的友元函数
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
out << m.mat[i][j] << " ";
}
out << endl;
}
return out;
}
程序4-5
/*
*************************************************************************
@file: main.cpp
@date: 2020.12.4
@author: Xiaoxiao
@brief: 矩阵相加 重载运算符 "+"、"<<"、">>"
@blog: https://blog.csdn.net/weixin_43470383/article/details/110562970
*************************************************************************
*/
#include <iostream>
using namespace std;
class Matrix
{
public:
Matrix(); // 声明默认构造函数
void input();
void display();
friend Matrix operator + (Matrix&, Matrix&); // 声明重载运算符"+"的友元函数
friend istream & operator >> (istream &, Matrix &); // 声明重载运算符"<<"的友元函数
friend ostream & operator << (ostream &, Matrix &); // 声明重载运算符">>"的友元函数
private:
int mat[2][3]; // 2×3 矩阵
};
Matrix::Matrix() // 定义默认构造函数
{
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
mat[i][j] = 0;
}
Matrix operator + (Matrix &a, Matrix &b) // 定义重载运算符"+"的友元函数
{
Matrix c;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
c.mat[i][j] = a.mat[i][j] + b.mat[i][j];
return c;
}
istream & operator >> (istream &in, Matrix &m) // 定义重载运算符"<<"的友元函数
{
cout << "pls input 2×3 matrix" << endl;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
in >> m.mat[i][j];
return in;
}
ostream & operator << (ostream &out, Matrix &m) // 定义重载运算符"<<"的友元函数
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
out << m.mat[i][j] << " ";
}
out << endl;
}
return out;
}
int main()
{
Matrix a, b, c;
cout << "Matrix a:" << endl;
cin >> a;
cout << "Matrix b:" << endl;
cin >> b;
cout << "Matrix c = Matrix a + Matrix b" << endl;
c = a + b;
cout << c;
system("pause");
return 0;
}
运行结果4-5
Matrix a:
pls input 2×3 matrix
7 9 8
6 2 4
Matrix b:
pls input 2×3 matrix
1 3 5
8 5 2
Matrix c = Matrix a + Matrix b
8 12 13
14 7 6