#include <iostream>
#include <iomanip>
#include <ctime>
#include <string.h>
#include <typeinfo>
#include <windows.h>
#include <time.h>
#include <unistd.h>
#include <math.h>
#include <vector>
#include <algorithm>
#include "mystring.h"
using namespace std;
#define PI 3.14
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class Matrix
{
public:
Matrix(void);
Matrix(int p[][3]);
Matrix(Matrix &matrix);
Matrix & operator =(const Matrix &matrix)
{
cout << this << "执行 = 函数:" << endl;
cout << "从这里赋值:" << &matrix << endl;
if (this == &matrix)
{
return *this;
}
int i;
int j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
this->data[i][j] = matrix.data[i][j];
}
}
return *this;
}
Matrix operator +(Matrix &matrix)
{
Matrix tmp;
int i;
int j;
cout << this << "执行 + 函数:" << endl;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
tmp.data[i][j] = this->data[i][j] + matrix.data[i][j];
}
}
return tmp;
}
Matrix operator *(Matrix &matrix)
{
cout << this << "执行 *函数:" << endl;
int i;
int j;
int k;
Matrix tmp;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
for (k = 0; k < 3; k++)
{
tmp.data[i][j] += this->data[i][k] * matrix.data[k][i];
}
}
}
return tmp;
}
Matrix & operator +=(Matrix &matrix)
{
cout << this << "执行 += 函数:" << endl;
int i;
int j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
this->data[i][j] += matrix.data[i][j];
}
}
return *this;
}
Matrix & operator *=(Matrix &matrix)
{
cout << this << "执行 *= 函数:" << endl;
int i;
int j;
int k;
Matrix tmp;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
for (k = 0; k < 3; k++)
{
tmp.data[i][j] += this->data[i][k] * matrix.data[k][i];
}
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
this->data[i][j] = tmp.data[i][j];
}
}
return *this;
}
void dis()
{
cout << this << "执行 dis() 函数: " << endl;
int i;
int j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
cout << this->data[i][j] << " ";
}
cout << endl << endl;
}
cout << endl;
}
~Matrix()
{
cout << "destructor" << this << endl;
}
private:
int data[3][3];
};
Matrix::Matrix(void)
{
cout << "无参构造:" << this << endl;
int i;
int j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
data[i][j] = 0;
}
}
}
Matrix::Matrix(int p[][3])
{
cout << "数组参数构造;" << this << endl;
int i;
int j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
data[i][j] = p[i][j];
}
}
}
Matrix::Matrix(Matrix &matrix)
{
cout << "拷贝构造:" << this << endl;
int i;
int j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
this->data[i][j] = matrix.data[i][j];
}
}
}
int main(int argc, char** argv)
{
// 测试无参构造函数
Matrix mat1;
cout << "mat1.dis()" << endl;
mat1.dis();
// 测试参数为二维数组的构造函数
int data[3][3] = {
1, 1, 1,
1, 1, 1,
1, 1, 1
};
Matrix mat2(data);
cout << "mat2.dis()" << endl;
mat2.dis();
// 测试拷贝构造函数
Matrix mat3(mat2);
cout << "mat3.dis()" << endl;
mat3.dis();
// 测试赋值函数
Matrix mat4;
cout << "mat4.dis()" << endl;
mat4.dis();
mat4 = mat3;
cout << "mat4.dis()" << endl;
mat4.dis();
// 测试 "+" 运算符
Matrix mat5;
cout << "mat4 + mat3" << endl;
mat5 = mat4 + mat3;
cout << "mat5.dis()" << endl;
mat5.dis();
// 测试 "*" 运算符
Matrix mat6;
cout << "mat6 = mat4 * mat5";
mat6 = mat4 * mat5;
cout << "mat6.dis()" << endl;
mat6.dis();
cout << "Hello world" << endl;
// 测试 "*=" 运算符
cout << "mat6 *= mat5" << endl;
mat6 *= mat5;
cout << "mat5.dis()" << endl;
mat5.dis();
cout << "mat6.dis()" << endl;
mat6.dis();
// 测试 "+=" 运算符
cout << "mat4.dis()" << endl;
mat4.dis();
mat5 += mat4;
cout << "mat5.dis()" << endl;
mat5.dis();
return 0;
}