class Array{ protected: int size: double *arr; public: ............. virtual ~Array(); //Деструкторы рекомендуется делать виртуальными для того, чтобы гарантировать правильное освобождение памяти из-под динамического объекта, поскольку в любой момент времени будет выбран деструктор, соответствующий физическому типу объекта. ........................... }; Array::Array(int n, double d=0.0){ arr=new double[size=n]; for (int i=0;isize-1) return arr[size-1]; if (i<0) return arr[0]; return arr[i]; } Array & Array::operator+(const Array &a){ Array *b; int i; if (size>=a.size){ b=new Array(*this); for (i=0;i> и << уже переопределены. Мы введём своё определение этих операций для своих типов данных. #include struct Info{ char *name; double value; int units; }; ostream & operator<<(ostream &s, Info &m){ s<>(istream &s, Info &m){ s>>m.name>>m.value>>m.units; return s; } void main(){ Info m; m.name=new char[20]; cout<<"\nВведите name,value,units"; cin>>m; cout<<"\nНаш объект:"; cout<