为什么减法的运算符操作一直不对
#include "stdafx.h"
#include "iostream.h"
class vect{
private:
float *p;
int n;
public:
vect(){p=NULL;n=0;}
vect(float b[],int m){
n=m;
p=new float[n];
for(int i=0;i<n;i++)
p[i]=b[i];
}
friend vect operator-(vect b,vect a);
vect operator+(vect b){
for(int j=0;j<n;j++)
{
p[j]=p[j]+b.p[j];
}
return *this;
}
void print(){
for(int i=0;i<n;i++)
cout<<p[i]<<" ";
}
};
vect operator-(vect a,vect b){
vect c;
for(int i=0;i<a.n;i++)
{
c.p[i]=a.p[i]-b.p[i];
}
return c;
}
int main(int argc, char* argv[])
{
float a[10],b[10];
int n,m;
cout<<"输入a,b向量和他们的维数"<<endl;
cout<<"维数:";
cin>>n>>m;
cout<<"a的值:"<<endl;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cout<<"b的值:"<<endl;
for(int j=0;j<m;j++)
{
cin>>b[j];
}
if(m==n)
{
vect x(a,n);
vect y(b,m);
vect l;
vect k;
l=x+y;
k=x-y;
l.print();
k.print();
}
else
cout<<"元素个数不同不能相加减";
return 0;
}
[解决办法]
给你添加了个拷贝构造函数,还有就是不是你的-操作符么有效果,而是你在+里面修改了值的。
class vect{private: float *p; int n;public: vect(){p=NULL;n=0;} vect(float b[],int m){ n=m; p=new float[n]; for(int i=0;i<n;i++) p[i]=b[i]; } vect(const vect& obj) { if (!p) { delete[] p; } n = obj.n; p = new float[obj.n]; for (int i=0;i<obj.n;++i) { p[i]=obj.p[i]; } } friend vect operator-(vect b,vect a); vect operator+(vect b){ for(int j=0;j<n;j++) { p[j]=p[j]+b.p[j]; } return *this; } void print(){ for(int i=0;i<n;i++) cout<<p[i]<<" "; }};vect operator-(vect a,vect b){ vect c(a.p,a.n); for(int i=0;i<a.n;i++) { c.p[i]=a.p[i]-b.p[i]; } return c;}int main(int argc, char* argv[]){ float a[10],b[10]; int n,m; cout<<"输入a,b向量和他们的维数"<<endl; cout<<"维数:"; cin>>n>>m; cout<<"a的值:"<<endl; for(int i=0;i<n;i++) { cin>>a[i]; } cout<<"b的值:"<<endl; for(int j=0;j<m;j++) { cin>>b[j]; } if(m==n) { vect x(a,n); vect y(b,m); vect l; vect k; l=x+y; k=x-y; l.print(); k.print(); } else cout<<"元素个数不同不能相加减"; return 0;}