c++重要知识点---模板、重载输入或输出运算符的运用

题目:

设一个程序,利用重载输入运算和重载输出运算实现对一个2X3的矩阵输入输出,重载‘+’运算符实现两个矩阵相加。利用模板的知识,使矩阵可以是int类型、double类型等其他类型

注意:在定义一个类模板的时候,如果使用到友元函数的时候,要给友元函数另外定义一个函数模板。原因:友元函数不属于类,它是类外函数。而类模板只对类里面的数据成员和成员函数起作用

main.cpp

#include <iostream>
using namespace std;
#include "class.h"
int main()
{
	matrix<double> M1, M2;
	matrix<double> M3;

	cin >> M1;
	cin >> M2;
	cout << M1 << "----------" << endl;
	cout << M2;
	M3 = M1 + M2;
	cout << M3;
	system("pause");
	return 0;

}

class.h

#pragma once
template <typename T>
class matrix
{
public:
	template <typename T1>//因为友元函数是类外函数,所以得另外定义一个函数模板
	friend istream &operator >> (istream &, matrix<T1> &);//输入矩阵
	template <typename T1>
	friend ostream &operator << (ostream &, matrix<T1> &);//输出矩阵
	matrix<T> operator + (matrix<T> &);//矩阵相加
private:
	T array[2][3];
};
template<typename T1>
istream &operator >> (istream &CIN, matrix<T1> &M)
{
	cout << "输入矩阵(2行3列):" << endl;
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			CIN >> M.array[i][j];
		}
	}
	return CIN;//返回给M
}
template<typename T1>
ostream &operator<<(ostream &OUT1,matrix<T1> &M)
{
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			OUT1<<M.array[i][j];
			cout<<' ';
		}
		cout << endl;
	}
	return OUT1;//把返回结果给M
}
template<typename T>
matrix<T> matrix<T>::operator+(matrix<T> &M2)
{
	matrix<T> M3;
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			M3.array[i][j] = array[i][j] + M2.array[i][j];
		}
	}
	return M3;
}


猜你喜欢

转载自blog.csdn.net/tobe_numberone/article/details/78159012