Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет39/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   35   36   37   38   39   40   41   42   ...   256
Байланысты:
Бьерн Страуструп. Язык программирования С . М Бином, 2011

1.4.2 Присваивание и инициализация 
Для многих типов задача управления ими сводится к построению и уничтожению связанных с ними 
объектов, но есть типы, для которых этого мало. Иногда необходимо управлять всеми операциями 
копирования. Вернемся к классу vector: 
void f () 

vector v1 ( 100 ); 
vector v2 = v1; 
// построение нового вектора v2, 
// инициализируемого v1 
v1 = v2;
// v2 присваивается v1 
// 
... 

Должна быть возможность определить интерпретацию операций инициализации v2 и присваивания v1. 
Например, в описании: 
class vector 

int * v; 
int 
sz; 
public: 
// 
... 
void operator = ( const vector & ); // 
присваивание 
vector ( const vector & ); 
// 
инициализация 
}; 
указывается, что присваивание и инициализация объектов типа vector должны выполняться с помощью 
определенных пользователем операций. Присваивание можно определить так: 
void vector::operator = ( const vector & a ) 
// контроль размера и копирование элементов 

if ( sz != a.sz ) 
error ( "недопустимый размер вектора для =" ); 
for ( int i = 0; i < sz; i++ ) v [ i ] = a.v [ i ]; 

Поскольку эта операция использует для присваивания "старое значение" вектора, операция 
инициализации должна задаваться другой функцией, например, такой: 
vector::vector ( const vector & a ) 
// инициализация вектора значением другого вектора 

sz = a.sz; 
// размер тот же 
v = new int [ sz ]; 
// выделить память для массива 
for ( int i = 0; i < sz; i++ ) 
//
копирование элементов 
v [ i ] = a.v [ i ]; 


Бьерн Страуструп.
Язык программирования С++ 
 
37 

В языке С++ конструктор вида T(const T&) называется конструктором копирования для типа T. Любую 
инициализацию объектов типа T он выполняет с помощью значения некоторого другого объекта типа T.
Помимо явной инициализации конструкторы вида T(const T&) используются для передачи параметров 
по значению и получения возвращаемого функцией значения. 


Достарыңызбен бөлісу:
1   ...   35   36   37   38   39   40   41   42   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет