图像处理C++基础 03 ——类

介绍概念:

宏。变量revisited(局部变量及作用域,函数的形参及实参,按值传递及按地址传递), 编程style, void *类型,变量命名。程序组织(函数/文件/项目);缺省参数

选介绍:类(OOP),类的封装性,new/delete操作符,构造,析构
练习:
使用类重复第一课任务,Matrix.文件:main(). 第2套:matrix.h, matrix.cpp

要求:

矩阵加法,矩阵乘法。建议在析构里free空间

(参考:C++高级编程 2版或3版,注意,只要参考第1章。其他的不要看!)


#include
   
   
    
    
using namespace std;

class Matrix
{
public:
	void Matrixnew();		/*创建矩阵*/
	void Matrixdel();		/*删除矩阵空间*/
	friend Matrix operator+(Matrix &, Matrix &);		/*矩阵加法*/
	friend Matrix operator*(Matrix &, Matrix &);		/*矩阵乘法*/
	void input();		/*输入矩阵元素*/
	void display();		/*输出矩阵元素*/
	int rows = 0;		/*矩阵的行、列数*/
	int columns = 0;

private:
	int **mat = NULL;	/*二维动态矩阵*/
};
#include
    
    
     
     
using namespace std;

class Matrix
{
public:
	void Matrixnew();		/*创建矩阵*/
	void Matrixdel();		/*删除矩阵空间*/
	friend Matrix operator+(Matrix &, Matrix &);		/*矩阵加法*/
	friend Matrix operator*(Matrix &, Matrix &);		/*矩阵乘法*/
	void input();		/*输入矩阵元素*/
	void display();		/*输出矩阵元素*/
	int rows = 0;		/*矩阵的行、列数*/
	int columns = 0;

private:
	int **mat = NULL;	/*二维动态矩阵*/
};

void Matrix::Matrixnew()
{
	mat = new int *[rows];
	for (int i = 0; i < rows; i++)
		mat[i] = new int[columns];

	for (int i = 0; i < rows; i++)
		for (int j = 0; j < columns; j++)
			mat[i][j] = 0;
}

void Matrix::Matrixdel()
{
	for (int i = 0; i < rows; i++)
		delete mat[i];
	delete mat;
}

Matrix operator+(Matrix &a, Matrix &b)
{
	Matrix c;
	
	c.rows = a.rows;
	c.columns = b.columns;
	c.Matrixnew();
	for (int i = 0; i < a.rows; i++)
		for (int j = 0; j < a.columns; j++)
			c.mat[i][j] = a.mat[i][j] + b.mat[i][j];

	return c;
}

Matrix operator*(Matrix &a, Matrix &b)
{
	Matrix c;

	c.rows = a.rows;
	c.columns = b.columns;
	c.Matrixnew();
	for (int i = 0; i < a.rows; i++)
		for (int j = 0; j < b.columns; j++)
			for (int k = 0; k < a.columns; k++)
				c.mat[i][j] += a.mat[i][k] * b.mat[k][j];

	return c;
}

void Matrix::input()
{
	cout << "Please enter the elements of the matrix:" << endl;
	for (int i = 0; i < rows; i++)
		for (int j = 0; j < columns; j++)
			cin >> mat[i][j];
}

void Matrix::display()
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < columns; j++)
			cout << mat[i][j] << '\t';
		cout << endl;
	}
	cout << endl;
}

int main(void)
{
	Matrix a, b, c;
	int i, j, k, flag = 0;

	cout << "Please enter the rows and the columns of the first matrix:";
	cin >> i >> j;
	cout << "Please enter the columns of the second matrix:";
	cin >> k;
	cout << "Which result do you want to get?" << endl;
	cout << "1.a+b=" << endl << "2.a*b" << endl;
	cin >> flag;

	a.rows = i;
	a.columns = j;
	b.rows = j;
	b.columns = k;
	c.rows = i;
	c.columns = k;

	a.Matrixnew();
	b.Matrixnew();
	c.Matrixnew();

	a.input();
	b.input();

	if (flag == 1)
	{
		c = a + b;
		cout << "The result of Matrix a add Matrix b is:" << endl;
		c.display();
	}
	else if (flag == 2)
	{
		c = a*b;
		cout << "The result of Matrix a multiply Matrix b is:" << endl;
		c.display();
	}

	a.Matrixdel();
	b.Matrixdel();
	c.Matrixdel();

	system("pause");
	return 0;
}
void Matrix::Matrixnew()
{
	mat = new int *[rows];
	for (int i = 0; i < rows; i++)
		mat[i] = new int[columns];

	for (int i = 0; i < rows; i++)
		for (int j = 0; j < columns; j++)
			mat[i][j] = 0;
}

void Matrix::Matrixdel()
{
	for (int i = 0; i < rows; i++)
		delete mat[i];
	delete mat;
}

Matrix operator+(Matrix &a, Matrix &b)
{
	Matrix c;
	
	c.rows = a.rows;
	c.columns = b.columns;
	c.Matrixnew();
	for (int i = 0; i < a.rows; i++)
		for (int j = 0; j < a.columns; j++)
			c.mat[i][j] = a.mat[i][j] + b.mat[i][j];

	return c;
}

Matrix operator*(Matrix &a, Matrix &b)
{
	Matrix c;

	c.rows = a.rows;
	c.columns = b.columns;
	c.Matrixnew();
	for (int i = 0; i < a.rows; i++)
		for (int j = 0; j < b.columns; j++)
			for (int k = 0; k < a.columns; k++)
				c.mat[i][j] += a.mat[i][k] * b.mat[k][j];

	return c;
}

void Matrix::input()
{
	cout << "Please enter the elements of the matrix:" << endl;
	for (int i = 0; i < rows; i++)
		for (int j = 0; j < columns; j++)
			cin >> mat[i][j];
}

void Matrix::display()
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < columns; j++)
			cout << mat[i][j] << '\t';
		cout << endl;
	}
	cout << endl;
}

int main(void)
{
	Matrix a, b, c;
	int i, j, k, flag = 0;

	cout << "Please enter the rows and the columns of the first matrix:";
	cin >> i >> j;
	cout << "Please enter the columns of the second matrix:";
	cin >> k;
	cout << "Which result do you want to get?" << endl;
	cout << "1.a+b=" << endl << "2.a*b" << endl;
	cin >> flag;

	a.rows = i;
	a.columns = j;
	b.rows = j;
	b.columns = k;
	c.rows = i;
	c.columns = k;

	a.Matrixnew();
	b.Matrixnew();
	c.Matrixnew();

	a.input();
	b.input();

	if (flag == 1)
	{
		c = a + b;
		cout << "The result of Matrix a add Matrix b is:" << endl;
		c.display();
	}
	else if (flag == 2)
	{
		c = a*b;
		cout << "The result of Matrix a multiply Matrix b is:" << endl;
		c.display();
	}

	a.Matrixdel();
	b.Matrixdel();
	c.Matrixdel();

	system("pause");
	return 0;
}
    
    
   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值