VEC::VEC():ne(0),v(NULL)
{fo<<"VEC() n"; }
VEC::VEC(int n) : ne(n), v(new double[n])
{fo<<"cst1 "<<this<<' '<<v<<endl;}
VEC :: VEC (VEC& a) //К-р инициализирует чистую память
{int i; ne=a.ne;
v=new double[ne];
for (i=0; i<ne; i++) v[i] = a.v[i];
//*this=a; // это копирование здесь не работает (поверхностное)
//Объект а:
//а. ne; a.v-–> |
// this->v=a.v; эта ссылка будет неопред., если а будет удалено.
//this->ne=a.ne; Здесь необходимо копирование глубинное.
fo<<"VEC(VEC& a)-cst2"<<this<<' '<<v<<endl; }
VEC::~VEC()
{fo<<"~VEC()dst "<<this<<' '<<v<<endl;
delete []v; }
double& VEC::operator [] (int i)
{if (i<0||i>=ne){fo<<"index is out of diapazon"<<endl; exit (0);}
return v[i];}
VEC& VEC::operator = (VEC& y)
{int i; fo<< "VEC::operator=(VEC& y)"<<this<<' '<<v<<endl;
if(y.ne!=ne){ delete [] v;
ne=y.ne; v=new double[ne];
for(i=0; i<ne; i++) v[i]=y.v[i];}
else if(this!=&y) for(i=0; i<ne; i++) v[i]=y.v[i];
return *this;
}
VEC VEC::operator+(VEC& y)
{int i, nm, p;
//fo<<"VEC::operator+(VEC& y)"<<this<<' '<<&y<<endl;
nm=y.ne;p=0; if(ne>nm) {nm=ne;p=1;}
VEC z(nm); //VEC* z = new VEC(nm); чтобы работало с &
if(p){z=*this;
for(i=0;i<y.ne;i++)
z.v[i]=z.v[i]+y.v[i];}
else {z=y;for(i=0;i<ne;i++)z.v[i]=z.v[i]+v[i];}