Поэлементное копирование - Большая Энциклопедия Нефти и Газа, статья, страница 1
Глупые женятся, а умные выходят замуж. Законы Мерфи (еще...)

Поэлементное копирование

Cтраница 1


Поэлементное копирование по умолчанию ( с помощью операции присваивания), h) открытого, закрытого, i) чтения get, j) интерфейс, k) инкапсулирована.  [1]

Если операция поэлементного копирования, выполняемая конструктором копирования, сгенерированным компилятором, не подходит для создаваемого класса, но необходимо инициализировать новые объекты с помощью существующих объектов того же типа, то определите собственный конструктор копирования. Например, класс CMessage, рассмотренный выше в этой главе, нельзя инициализировать, используя простое копирование членов класса, так как он содержит переменные, являющиеся указателями на блок памяти.  [2]

Конструктор, е) private, f) set -, g) поэлементное копирование по умолчанию, h) private, public, i) get -, j) интерфейсом, k) инкапсулирована.  [3]

Если перегруженная операция присваивания не определена, то присваивание разрешено, но, по умолчанию, присваивание будет просто поэлементным копированием каждого элемента данных. В некоторых случаях это приемлемо. Для объектов, которые содержат указатели на динамически выделенную память, поэлементное копирование даст в результате два различных объекта, указывающих на ту же самую динамически выделенную память. Вызов деструктора для любого из этих объектов очищает выделенную память.  [4]

Если конструктор копирования класса не определен, то компилятор генерирует его неявно Конструктор, генерируемый компилятором, инициализирует новый объект, выполняя операцию поэлементного копирования переменных существующего объекта класса, передаваемого как параметр. Соответственно, используя объект того же типа, всегда можно инициализировать его, даже если конструктор копирования в классе не определен.  [5]

Операция присваивания () используется для присваивания некоторого объекта другому объекту того же типа. Замечание: поэлементное копирование может вызывать серьезные проблемы, если оно используется с классом, элементы данных которого содержат динамически выделяемую память; в главе 18, Перегрузка операций, мы будем обсуждать эти проблемы и покажем способы их решения.  [6]

Операция присваивания () используется для присваивания некоторого объекта другому объекту того же типа. Такое присваивание обычно выполняется посредством поэлементного копирования - каждый элемент одного объекта по отдельности копируется в такой же элемент в другом объекте.  [7]

Чтобы использовать операцию с объектами класса, эта операция должна быть перегружена, но здесь есть два исключения. Операция присваивания () может использоваться с любым классом без перегрузки для выполнения поэлементного копирования по умолчанию. Операция взятия адреса ( &) также может использоваться с объектами любого класса без перегрузки; эта операция просто возвращает адрес объекта в памяти.  [8]

Он инициализирует объект Array копированием существующего объекта Array. Такое копирование должно выполняться осторожно, чтобы избежать ловушки получения двух объектов Array, указывающих на одну и ту же динамически выделенную память, т.е. здесь та же самая проблема, что и при поэлементном копировании элементов данных по умолчанию. Конструктор копии вызывается всякий раз, когда необходимо копирование объекта: при вызове по значению, при возврате объекта из вызванной функции; при инициализации, когда один объект копируется в другой объект того же класса.  [9]

Если перегруженная операция присваивания не определена, то присваивание разрешено, но, по умолчанию, присваивание будет просто поэлементным копированием каждого элемента данных. В некоторых случаях это приемлемо. Для объектов, которые содержат указатели на динамически выделенную память, поэлементное копирование даст в результате два различных объекта, указывающих на ту же самую динамически выделенную память. Вызов деструктора для любого из этих объектов очищает выделенную память.  [10]

Чтобы использовать операцию с объектами класса, эта операция должна быть перегружена, но здесь есть два исключения. Операция присваивания () может использоваться с любым классом без перегрузки. Поведение по умолчанию операции присваивания ( в тех случаях, когда она не перегружена) обеспечивается поэлементным копированием элементов данных класса. Далее мы увидим, что такая поэлементная копия, создаваемая по умолчанию, представляет опасность для классов, элементы которых ссылаются на динамически выделяемые области памяти; для таких классов мы, как правило, будем перегружать операцию присваивания. Операция адреса ( &) также может использоваться с объектами любого класса без перегрузки; эта операция просто возвращает адрес объекта в памяти.  [11]

Функция operator создает временный объект Temp класса CCurrency, содержащий размер денежной суммы, полученной в результате сложения двух объектов. Затем она возвращает временный объект. Кроме того, приведенное выше выражение присваивает возвращаемый объект экземпляру Total класса CCurrency. Такой способ присваивания делает возможным поэлементное копирование компилятором переменных-членов одного класса в другой.  [12]



Страницы:      1