64,683
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
class integer
{
protected:
int n;
public:
integer(int);
};
integer::integer(int m)
{
n = m;
}
class vector:public integer
{
protected:
int* v;
public:
vector(int);
vector(const int*, int);
vector(const vector&);
~vector();
int& operator[](int i)const;
vector& operator =(const vector);
friend vector operator +(const vector&, const vector&);
friend vector operator -(const vector&, const vector&);
friend int operator *(const vector&, const vector&);
friend ostream& operator <<(ostream& output, const vector&);
friend istream& operator >>(istream& input, const vector&);
};
vector::vector(int m):integer(m)
{
v = new int[m];
for (int i = 0; i < m; i++)
v[i] = 0;
}
vector::vector(const int* m, int n):integer(n)
{
v = new int[n];
for (int i = 0; i < n; i++)
v[i] = m[i];
}
vector::vector(const vector& a):integer(a.n)
{
v = new int[a.n];
for (int i = 0; i < a.n; i++)
v[i] = a[i];
}
vector::~vector()
{
delete[] v;
n = 0;
}
int& vector::operator[](int i)const
{
return v[i];
}
vector& vector::operator =(const vector a)
{
for (int i = 0; i < a.n; i++)
v[i] = a[i];
return *this;
}
vector operator +(const vector& m, const vector& n)
{
vector t(m.n);
for (int i = 0; i < m.n; i++)
t[i] = m[i] + n[i];
return t;
}
vector operator -(const vector& m, const vector& n)
{
vector t(m.n);
for (int i = 0; i < m.n; i++)
t[i] = m[i] - n[i];
return t;
}
int operator *(const vector& m, const vector& n)
{
int t;
t = 0;
for (int i = 0; i < m.n; i++)
t += m[i] * n[i];
return t;
}
ostream& operator <<(ostream& output, const vector& m)
{
cout << "[";
for (int i = 0; i < m.n; i++)
{
cout << m[i];
if (i < m.n - 1) cout << ",";
}
cout << "]";
return output;
}
istream& operator >>(istream& input, const vector& m)
{
for (int i = 0; i < m.n; i++)
cin >> m[i];
return input;
}
class matrix:public vector
{
protected:
int** matr;
int m;
public:
matrix(int =0,int=0);
matrix(const matrix&);
int*& operator[](int i)const;
matrix& operator =(const matrix);
friend matrix operator +(const matrix&, const matrix&);
friend matrix operator -(const matrix&, const matrix&);
friend matrix operator *(const matrix&, const matrix&);
friend ostream& operator <<(ostream& output, const matrix&);
friend istream& operator >>(istream& input, const matrix&);
};
matrix::matrix(int a,int b):vector(b)
{
m = a;
matr = new int* [m];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
v[j] = 0;
matr[i] = &v[0];
delete[]v;
v = new int[n];
}
}
matrix::matrix(const matrix& p):vector(p.n)
{
m = p.m;
matr = new int*[m];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
v[j] = 0;
matr[i] = &v[0];
delete[]v;
v = new int[n];
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
matr[i][j] = p[i][j];
}
int*& matrix::operator[](int i)const
{
return matr[i];
}
matrix& matrix::operator =(const matrix p)
{
m = p.m;
n = p.n;
matr = new int* [m];
v = new int[n];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
v[j] = 0;
matr[i] = &v[0];
delete[]v;
v = new int[n];
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
matr[i][j] = p[i][j];
return *this;
}
matrix operator +(const matrix& x, const matrix& y)
{
matrix t(x.m, x.n);
for (int i = 0; i < x.m; i++)
for (int j = 0; j < x.n; j++)
t[i][j] = x[i][j]+y[i][j];
return t;
}
matrix operator -(const matrix& x, const matrix& y)
{
matrix t(x.m, x.n);
for (int i = 0; i < x.m; i++)
for (int j = 0; j < x.n; j++)
t[i][j] = x[i][j] - y[i][j];
return t;
}
matrix operator *(const matrix& x, const matrix& y)
{
if (x.n != x.m) {
cout << "matrix size not match";
abort();
}
int t;
int a, b;
a = 0; b = 0; t = 0;
matrix temp(x.m, y.n);
for(int i=0;i<x.m;i++)
{
a = i;
for (int j = 0; j < y.n; j++)
{
b = j;
for (int k = 0; k < x.n; k++)
t += x[i][k] * y[k][j];
temp[a] = t;
t = 0;
}
}
return temp;
}
ostream& operator <<(ostream& output, const matrix& p)
{
for (int i = 0; i < p.m; i++)
{
for (int j = 0; j < p.n; j++)
cout << p[i][j];
cout << endl;
}
return output;
}
istream& operator >>(istream& input, const matrix& p)
{
for (int i = 0; i < p.m; i++)
for (int j = 0; j < p.n; j++)
cin>> p[i][j];
return input;
}
int main() {
int r1, r2, c1, c2;
cout << "Input the numble of row and column of Matrix A:/n";
cin >> r1 >> c1;
matrix A(r1, c1);
cout << "Input the elements of Matrix A:/n";
cin >> A;
cout << "Input the numble of row and column of Matrix B:/n";
cin >> r2 >> c2;
matrix B(r2, c2);
cout << "Input the elements of Matrix B:/n";
cin >> B;
matrix C;
cout << "A+B=" << endl;
C = A + B;
cout << C << endl;
cout << "A-B=" << endl;
C = A - B;
cout << C << endl;
cout << "A*B=" << endl;
C = A * B;
cout << C << endl;
}
matrix::matrix(int a, int b) :vector(b)
{
m = a;
matr = new int*[m];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
v[j] = 0;
matr[i] = &v[0];
delete[]v;//---问题出在这行代码,每次循环都把之前申请的内存释放掉,在后面这些内存就被其它数据占用了-----------
v = new int[n];
}
}
matrix operator *(const matrix& x, const matrix& y)
{
if (x.n != x.m) {
cout << "matrix size not match";
abort();
}
int t;
int a, b;
a = 0; b = 0; t = 0;
matrix temp(x.m, y.n);
for(int i=0;i<x.m;i++)
{
a = i;
for (int j = 0; j < y.n; j++)
{
b = j;
for (int k = 0; k < x.n; k++)
t += x[i][k] * y[k][j];
temp[a]<strong> = t;//---------<strong>是个什么情况??
t = 0;
}
}
return temp;
}