C++程序设计 (第三版) 谭浩强 习题10.5
习题 10.5 在第4题的基础上,重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入和输出。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
#include <iostream>
#include <iomanip>
using namespace std;
const int ROW = 2;
const int COL = 3;
class Matrix{
public:
Matrix();
Matrix(int a[][COL]);
friend Matrix operator + (Matrix, Matrix);
friend istream& operator >> (istream &, Matrix &);
friend ostream& operator << (ostream &, Matrix &);
private:
int arr[ROW][COL];
};
Matrix::Matrix(){
for(int i = 0; i < ROW; i++){
for(int j = 0; j < COL; j++){
arr[i][j] = 0;
}
}
}
Matrix::Matrix(int a[][COL]){
for(int i = 0; i < ROW; i++){
for(int j = 0; j < COL; j++){
arr[i][j] = a[i][j];
}
}
}
Matrix operator + (Matrix m1, Matrix m2){
Matrix m3;
for(int i = 0; i < ROW; i++){
for(int j = 0; j < COL; j++){
m3.arr[i][j] = m1.arr[i][j] + m2.arr[i][j];
}
}
return m3;
}
istream& operator >> (istream &input, Matrix &m){
for(int i = 0; i < ROW; i++){
for(int j = 0; j < COL; j++){
input>>m.arr[i][j];
}
}
return input;
}
ostream& operator << (ostream &output, Matrix &m){
output<<setiosflags(ios::right);
for(int i = 0; i < ROW; i++){
for(int j = 0; j < COL; j++){
output<<setw(3)<<m.arr[i][j];
}
cout<<endl;
}
cout<<endl;
return output;
}
void inputMatrix(Matrix &m, char *str){
cout<<"Enter Matrix "<<str<<":"<<endl;
cin>>m;
}
void outputMatrix(Matrix &m, char *str){
cout<<"Matrix "<<str<<":"<<endl;
cout<<m;
}
int main(){
int mt[2][3] = {{13, 14, 15}, {16, 17, 18}};
Matrix m1, m2, m3;
Matrix m4(mt);
inputMatrix(m1, "1");
outputMatrix(m1, "1");
inputMatrix(m2, "2");
outputMatrix(m2, "2");
m3 = m1 + m2;
outputMatrix(m3, "3");
m3 = m1 + m4;
outputMatrix(m3, "4");
system("pause");
return 0;
}