Оператор присваивания. В С++ версии 2.0 имеется операция присваивания по умолчанию, которая выполняет рекурсивное по членное копирование одного объекта в другой

В С++ версии 2.0 имеется операция присваивания по умолчанию, которая выполняет рекурсивное по членное копирование одного объекта в другой. В более ранних версиях использовался механизм побитового копирования.

vect first(200),second(200);

second=first; cout << second[10]; // =9

first[10]=-50; cout << second[10]; //=-50

Когда назначение не перегруженно, оно определяется по умолчанию с семантикой, представляющей собой присвоения значения. Это называется “семантикой поверхностного копирования” и не всегда допустимо. Перегрузка назначения желательна, а иногда и необходима, особенно, если класс содержит указатели динамически распределяемой памяти:

vect &vect::operator=(const vect &) {

int s=(size<v.size)? size: v.size;

for(int i=0; i<s; i++) p[i]=v.p[i]; return *this; }

Если необходимо запретить операцию присваивания для объектов данного класса, то ее нужно просто объявить в закрытой части объявления.

Class IntStack {

int *v, size,top;

public:

IntStack &operator=(const IntStack&);

};

IntStack & IntStack::operator=(IntStack &from) {

if(this!= &from) { // Проверка на from=from

delete [] v;

v= new int [size=from.size]; for(int i=0; i<size; i++) v[i]=from.v[i];

top=from.top;

}

return *this; // Позволяет выполнять множественное присваивание

}

IntStack a(100),b,c;

b=c=a;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: