创建Martrix3类, 能够动态生成一个指定维数的三维数组,继而生成两个对象a,b,最后求两个三维数组之和a+b,以及三维数组差a-b,重载运算符+,-,>>,<<使之实现基于矩阵的+,-,输入和输出。
方法一:
#include <iostream>
#include<ctime>
#include<Windows.h>
using namespace std;
class Martrix3
{
private:
int x;
int y;
int z;
int* pointer;
public:
//友元函数重载<< >>
friend ostream& operator<<(ostream& output, const Martrix3& martrix3);
friend istream& operator>>(istream& input, const Martrix3& martrix3);
//定义+ -
friend Martrix3 operator+(const Martrix3& a, const Martrix3& b);
friend Martrix3 operator-(const Martrix3& a, const Martrix3& b);
Martrix3()
{
this->x = 0; //长
this->y = 0; //宽
this->z = 0; //高
pointer = NULL;
}
Martrix3(int x, int y, int z)
{
this->x = x;
this->y = y;
this->z = z;
this->pointer = new int[this->x * this->y * this->z];
int i, j, k;
srand((unsigned)time(NULL));
Sleep(1000);
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
for (k = 0; k < z; k++)
{
pointer[i * x + j * y + k] = rand() % 11;
}
}
}
}
};
ostream& operator<<(ostream& output, const Martrix3& martrix3) //<<
{
for (int i = 0; i < martrix3.x; i++)
{
for (int j = 0; j < martrix3.y; j++)
{
for (int k = 0; k < martrix3.z; k++)
output << martrix3.pointer[i * martrix3.x + j * martrix3.y + k] << ' ';
output << endl;
}
output << endl;
}
return output;
}
istream& operator>>(istream& input, const Martrix3& martrix3) //>>
{
for (int i = 0; i < martrix3.x; i++)
{
for (int j = 0; j < martrix3.y; j++)
{
for (int k = 0; k < martrix3.z; k++)
{
input >> martrix3.pointer[i * martrix3.x + j * martrix3.y + k];
}
cout << endl;
}
}
return input;
}
Martrix3 operator+(const Martrix3& a, const Martrix3& b) //+
{
int x = a.x;
int y = a.y;
int z = a.z;
Martrix3 result(x, y, z);
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
for (int k = 0; k < z; k++)
{
result.pointer[i * x + j * y + k] = a.pointer[i * x + j * y + k] + b.pointer[i * x + j * y + k];
}
}
}
return result;
}
Martrix3 operator-(const Martrix3& a, const Martrix3& b) //-
{
int x = a.x;
int y = a.y;
int z = a.z;
Martrix3 result(x, y, z);
for (int i = 0; i < x * y * z; i++)
{
result.pointer[i] = a.pointer[i] - b.pointer[i];
}
return result;
}
int main()
{
Martrix3 a(2,5,4);
Martrix3 b(2,5,4);
Martrix3 c;
Martrix3 d;
cout << "三维数组a:" << endl;
cout << a << endl;
cout << "三维数组b:" << endl;
cout << b << endl;
c = a + b;
d = a - b;
cout << "矩阵相加:"<< endl;
cout << c << endl;
cout << "矩阵相减:" << endl;
cout << d << endl;
return 0;
}
方法二:
#include <iostream>
#include <iomanip>
#include<ctime>
#include<Windows.h>
using namespace std;
class Martrix3 {
private:
int height, row, col; //依次为三维数组的高、行、列
int*** mat;
public:
Martrix3();
Martrix3(int height, int row, int col);
Martrix3(const Martrix3& m); //拷贝构造函数
~Martrix3();
void filldata();
Martrix3& operator=(const Martrix3& m)
{
int i, j, k;
int height, row, col;
height = m.height;
row = m.row;
col = m.col;
this->height = height;
this->row = row;
this->col = col;
this->mat = new int** [this->height];//动态创建三维数组
for (i = 0; i < height; i++)
{
mat[i] = new int* [row];
}
for (i = 0; i < height; i++)
{
for (j = 0; j < row; j++)
{
mat[i][j] = new int[this->col];
}
}
for (i = 0; i < height; i++)
{
for (j = 0; j < row; j++)
{
for (k = 0; k < col; k++)
{
mat[i][j][k] = m.mat[i][j][k];
}
}
}
return (*this);
}
定义+ - * /
friend Martrix3 operator +(Martrix3& m1, Martrix3& m2);
friend Martrix3 operator -(Martrix3& m1, Martrix3& m2);
//
//友元函数重载<< >>
friend ostream& operator << (ostream& output, Martrix3& A);
friend istream& operator >> (istream& input, Martrix3& A);
};
Martrix3::Martrix3() {
this->height = 0;
this->row = 0;
this->col = 0;
this->mat = NULL;
}
Martrix3::Martrix3(int height, int row, int col) {
this->height = height;
this->row = row;
this->col = col;
int i, j;
mat = new int** [this->height];
for (i = 0; i < this->height; i++)
{
mat[i] = new int* [this->row];
}
for (i = 0; i < this->height; i++)
{
for (j = 0; j < this->row; j++)
{
mat[i][j] = new int[this->col];
}
}
}
void Martrix3::filldata()
{
//输入三维数组值:
srand((unsigned)time(NULL));
Sleep(1000);
for (int i = 0; i < height; i++)
{
for (int j = 0; j < row; j++)
{
for (int k = 0; k < col; k++)
{
mat[i][j][k] = rand() % 11;
// cout<<mat[i][j][k]<<"\t";
}
}
}
}
Martrix3::~Martrix3()
{
int i, j;
for (i = 0; i < this->height; i++)
{
for (j = 0; j < this->row; j++)
{
delete[] mat[i][j];
}
delete[] mat[i];
}
delete[] mat;//先创建的后析构
}
//定义拷贝构造函数
Martrix3::Martrix3(const Martrix3& m)
{
int i, j, k;
row = m.row;
col = m.col;
height = m.height;
mat = new int** [this->height];//动态创建三维数组
for (i = 0; i < height; i++)
mat[i] = new int* [row];
for (i = 0; i < height; i++)
for (j = 0; j < row; j++)
mat[i][j] = new int[this->col];
for (i = 0; i < height; i++)
for (j = 0; j < row; j++)
for (k = 0; k < col; k++)
mat[i][j][k] = m.mat[i][j][k];
}
istream& operator >> (istream& input, Martrix3& A)
{
int i, j, k;
cout << "请输入三维矩阵:" << endl;
for (i = 0; i < A.height; i++) {
// cout<<"输入第 "<<i+1<<" 高:"<<endl;
for (j = 0; j < A.row; j++)
{
// cout<<"输入第 "<<j+1<<" 行:"<<endl;
for (k = 0; k < A.col; k++) {
input >> A.mat[i][j][k];
}
}
}
return input;
}
ostream& operator << (ostream& output, Martrix3& A)
{
int i, j, k;
for (i = 0; i < A.height; i++)
{
//cout<<"height="<<i<<":"<<endl;
for (j = 0; j < A.row; j++)
{
for (k = 0; k < A.col; k++)
{
output << A.mat[i][j][k] << "\t";
}
//cout<<endl;
}
//cout<<endl;
}
return output;
}
Martrix3 operator +(Martrix3& m1, Martrix3& m2) {
Martrix3 m3(m1.height, m1.row, m1.col);
int i, j, k;
if ((m1.row == m2.row) && (m1.col == m2.col) && (m1.height == m2.height)) //判断两个矩阵是否为行数列数高数相同的矩阵,若是,就进行对应元素相加
{
for (i = 0; i < m1.height; i++)
for (j = 0; j < m1.row; j++)
for (k = 0; k < m1.col; k++)
m3.mat[i][j][k] = m1.mat[i][j][k] + m2.mat[i][j][k];
}
return m3;
}
Martrix3 operator -(Martrix3& m1, Martrix3& m2) {
Martrix3 m3(m1.height, m1.row, m1.col);
int i, j, k;
if ((m1.row == m2.row) && (m1.col == m2.col) && (m1.height == m2.height))
//判断两个矩阵是否为行数列数高数相同的矩阵,若是,就进行对应元素相减
{
for (i = 0; i < m1.height; i++)
for (j = 0; j < m1.row; j++)
for (k = 0; k < m1.col; k++)
m3.mat[i][j][k] = m1.mat[i][j][k] - m2.mat[i][j][k];
}
return m3;
}
int main()
{
Martrix3 a(3, 2, 2);
a.filldata();
cout << "三维数组a:" << endl;
cout << a << endl;
Martrix3 b(3, 2, 2);
b.filldata();
cout << "三维数组b:" << endl;
cout << b << endl;
Martrix3 c;
c = a + b;
cout << "矩阵相加:" << endl;
cout << c << endl;
Martrix3 d(a - b);
//d = a - b; //d.operatore=(a-b);
cout << "矩阵相减:" << endl;
cout << d << endl;
// Martrix3 e(2,2,2);
// cin >>e;
// cout <<e;
return 0;
}