定义向量类,矩阵类实现矩阵的加法

时间:2021-10-05 12:05:52
输出不了正确的结果,如:
2 3
1 2 3
4 5 6
1 2 3
4 5 6
输出结果是
0 0 0
0 0 0
通过逐条调试,向量类部分代码没问题,在重载矩阵加法的函数中出现了问题,(A+B)并没有返回所想要的矩阵地址。
这是为什么?
#include<iostream>
using namespace std;
static int l=0,L=0;
template<typename T>
class Vector
{
public:
Vector (int =l);
Vector (const Vector<T>&);
T &operator[](int i)const;
int operator ()()const;
Vector<T> &operator=(const Vector<T>&);
template<typename T>
friend Vector<T> operator+(const Vector<T>  &,const Vector<T> &);
template<typename T>
friend ostream & operator<<(ostream &output,const Vector<T>&);
template<typename T>
friend istream & operator>>(istream &input,const Vector<T>&);
private:
T *v;
int len;
};
template<typename T>Vector<T>::Vector(int size)
{
len=size;
v=new T[size];
for (int i=0;i<size;i++)
{
v[i]=0;
}
}
template<typename T>Vector<T>::Vector(const Vector<T>&A)
{
len=A();
v=new T [len];
for (int i=0;i<len;i++)
{
v[i]=A[i];
}
}
template<typename T>T&Vector<T>::operator[](int i)const
{
return v[i];
}
int Vector<int>::operator()()const //???
{
return len;
}
//change
template<typename T>Vector<T>& Vector<T>::operator=(const Vector<T>&B)
{
for (int i=0;i<B();i++)
{
v[i]=B[i];  
}   
return *this;
}
template<typename T>
Vector<T> operator+(const Vector<T>  &A,const Vector<T> &B)
{
int size=A();
Vector<T> q(size);
for (int i=0;i<size;i++)
{
q[i]=A[i]+B[i];
}
return Vector<T> (q);
}
template<typename T>
ostream & operator<<(ostream &output,const Vector<T>&A)
{
for (int i=0;i<A.len;i++)
output<<A.v[i]<<" ";
return output;
}
template<typename T>
istream & operator>>(istream &input,const Vector<T>&A)
{
for (int i=0;i<A();i++)
input>>A.v[i];
return input;
}
template<typename T>
class M
{
private:
int Row;
int Line;
Vector<T> *m;
public:
M(int=L,int=l);
M( M<T>&);
int returnRow()
{
return Row;
}
int returnLine()
{
return Line;
}
Vector<T>& operator[](int i)const;
template<typename T>
friend M<T> operator+(const M<T> &,const M<T> &);
void out();
void in();
M &operator=(const M<T>&);
};
template<typename T>M<T>::M(int a,int b)
{
Row=a;
Line=b;
l=Line;
L=Row;
m=new Vector<T>[Row];
}
template<typename T>M<T>::M(M<T>&A)
{
int a=A.returnRow();
int b=A.returnLine();
l=b;
m=new Vector<T>[a];
for (int i=0;i<a;i++)
{
m[i]=A[i];
}
}
template<typename T>Vector<T> &M<T>::operator[](int i)const
{
return m[i];
}
template<typename T>
M<T> operator+(const M<T> &A,const M<T> &B)
{
l=A.Line;
L=A.Row;
M<T> w(L,l);
for (int i=0;i<L;i++)
{
w[i]=A[i]+B[i];
}
return w;
}
template<typename T>
void M<T>::out()
{
for (int i=0;i<Row;i++)
{
cout<<m[i]<<endl;
}
}
template<typename T>
 void M<T>::in()
{
for (int i=0;i<Row;i++)
{
cin>>m[i];
}
}
template<typename T>M<T>& M<T>::operator=(const M<T>&A)
{
for (int i=0;i<A.Row;i++)
{
m[i]=A[i];
}
return *this;
}
int main()
{
int row,line;
cin>>row>>line;
M<int> A(row,line),B(row,line),c(row,line);
M<int> *q;
A.in();
B.in();
c=A+B;
c.out();
}

4 个解决方案

#1


代码太长,没有看完

template<typename T>Vector<T>& Vector<T>::operator=(const Vector<T>&B)
{
for (int i=0;i<B();i++)
{
v[i]=B[i];  
}   
return *this;
}
这个函数有问题,复制构造函数,没有释放当前对象的T *v内存,也没有申请新的内存

#2


嗯,我想“当前对象”只得是等号左边的对象吧不用释放内存、申请新内存吖,因为
如果有以下代码
Vector<int> A(3),c(3);//在这里c已经有了初值0,0,0
cin>>A;
c=A;                              //这里只是修改c的值而已
cout<<A;
向量类我拿出来单独运行过,可以实现向量加减。
但是一加入M类,就不行了,经过逐步调试,我想问题出现在M的加法函数那里,但是我找不出哪里错误了 定义向量类,矩阵类实现矩阵的加法

#3


搜“向量类 矩阵类 CPP源代码”

#4


该回复于2015-04-20 12:55:48被管理员删除

#1


代码太长,没有看完

template<typename T>Vector<T>& Vector<T>::operator=(const Vector<T>&B)
{
for (int i=0;i<B();i++)
{
v[i]=B[i];  
}   
return *this;
}
这个函数有问题,复制构造函数,没有释放当前对象的T *v内存,也没有申请新的内存

#2


嗯,我想“当前对象”只得是等号左边的对象吧不用释放内存、申请新内存吖,因为
如果有以下代码
Vector<int> A(3),c(3);//在这里c已经有了初值0,0,0
cin>>A;
c=A;                              //这里只是修改c的值而已
cout<<A;
向量类我拿出来单独运行过,可以实现向量加减。
但是一加入M类,就不行了,经过逐步调试,我想问题出现在M的加法函数那里,但是我找不出哪里错误了 定义向量类,矩阵类实现矩阵的加法

#3


搜“向量类 矩阵类 CPP源代码”

#4


该回复于2015-04-20 12:55:48被管理员删除