`
txf2004
  • 浏览: 6864800 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《C++第九周实验报告4-1》---建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数, //完成矩阵的输入、输出、加、减、相等判断等操作。

 
阅读更多
//【任务4】建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数,
//完成矩阵的输入、输出、加、减、相等判断等操作。
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:   Douary.cpp                           
* 作    者:   计114-3 王兴锋     
* 完成日期:    2012  年   4    月    16    日
* 版 本 号:       V 1.0
* 对任务及求解方法的描述部分
* 输入描述:建立一个二维数组类Douary 
* 问题描述: 使该类中有以下数据成员、成员函数及友员函数,
完成矩阵的输入、输出、加、减、相等判断等操作。
* 程序输出:按要求输出 
* 程序头部的注释结束
*/

#include <iostream>

using namespace std;

class Douary
{
public:
	Douary(int m, int n);//构造函数:用于建立动态数组存放m行n列的二维数组(矩阵)元素,并将该数组元素初始化为
	Douary(const Douary &d);
	~Douary(){delete [] Array;} //析构函数:用于释放动态数组所占用的存储空间。

	friend istream & operator >> (istream &input, Douary &d);//重载运算符“>>”输入二维数组,其中d为Dousry类对象;
	friend ostream & operator << (ostream &output, Douary &d);//重载运算符“<<”以m行n列矩阵的形式输出二维数组,
	//其中d为Douary类对象。
	friend Douary operator + (const Douary &d1, const Douary &d2);//两个矩阵相加,规则:对应位置上的元素相加
	friend Douary operator - (const Douary &d1, const Douary &d2);//两个矩阵相减,规则:对应位置上的元素相减
	bool operator == (const Douary &d);//判断两个矩阵是否相等,即对应位置上的所有元素是否相等
private:
	int * Array;      //Array 为动态数组指针。
	int row;          //row  为二维数组的行数。
	int col;          //col   为二维数组的列数。
};
Douary::Douary(int m, int n)
{
	row = m, col = n;
	Array = new int [row*col];

	for (int i = 0; i < row*col; i++)
		Array[i] = 0;
}
Douary::Douary(const Douary &d)
{
	col = d.col, row = d.row;
	Array = new int[row*col]; 

	for (int i = 0; i < row*col; i++)
		Array[i] = d.Array[i];
}
istream & operator >> (istream &input, Douary &d)
{
	cout << "请输入元素(" << d.row << "行" << d.col <<"列):" << endl;

	for (int i = 0; i < d.col*d.row; i++)
	{	
		input >> d.Array[i];
	}

	return input;
}
ostream & operator << (ostream &output, Douary &d)
{
	for (int i = 0; i < d.col*d.row; i++)
	{
		if (i % d.col == 0) cout << endl;
		output << d.Array[i] <<'\t';
	}
	cout << endl;
	return output;
}
Douary operator + (const Douary &d1, const Douary &d2)
{
	Douary D(d1);

	for (int i = 0; i < d1.col*d1.row; i++)
			D.Array[i] = d1.Array[i] + d2.Array[i];

	return D;	
}
Douary operator - (const Douary &d1, const Douary &d2)
{
	Douary D(d1);

	for (int i = 0; i < d1.col*d1.row; i++)
			D.Array[i] = d1.Array[i] - d2.Array[i];

	return D;	
}
bool Douary::operator == (const Douary &d)
{
	if (this->col == d.col && this->row == d.row)
	{
		for (int i = 0; i < d.col*d.row; i++)
				if (*(this->Array+i) != *(d.Array+i))
					return false;
	}
	else
		return false;

	return true;
}
int main()
{
	Douary d1(2, 3), d2(2, 3);

	cout << "输入d1:" << endl;
	cin >> d1;
	cout << "输入d2:" << endl;
	cin >> d2;

	cout << "d1=" ;
	cout << d1;
	cout << "d2=";
	cout << d2;

	cout << "d1+d2=";
	cout << (d1+d2);
	cout << "d1-d2=";
	cout << (d1-d2);

	cout << "d1" << ((d1==d2)? "==":"!=") << "d2" << endl;

	system("pause");
	return 0;
}
/*
通过本题可以看出friend对数据的安全性是有一定威胁的。
为了一时的方便,而丢失了安全。
所有的函数都定义为friend就没啥意义了。
不合算啊;

注意this指针的用法。
注意复制构造函数参数的写法。
注意动态分配内存的方法。
注意用一个指向整型的指针,表示二维数组的方法。
这些都是要好好学习的。
程序写多了才知道自己不会的东西还很多啊!!!!!!!!!!!!
*/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics