Копирование объектов класса
А операция назначения и вызывающие объекты должны быть скопированы операции инициализации.
назначение: Если одно значение объекта присвоено другому объекту, скопировать первый объект ко второму объекту.Поэтому
Point a, b; ... a = b;
значение b необходимо скопировать в a.
инициализация: Инициализация происходит, если новый объект объявлен, если аргументы, передаваемые функциям значение или когда значения возвращаются из функций значением.
Можно определить семантику "копировать" для объектов типа класса.Например, рассмотрим следующий код:
TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;
Предыдущий код может означать, что содержимое "копия" FILE1.DAT к FILE2.DAT или ним может означать "пропустить FILE2.DAT и выполните b второй дескриптор FILE1.DAT". Нужно вложить необходимую семантику копирования к каждому классу, как показано ниже.
С помощью оператора присваивания operator= вместе с ссылкой на тип класса в качестве возвращаемого типа, а параметр, который передается const ссылка- пример ClassName& operator=(const ClassName& x);.
С помощью конструктора копии.Дополнительные сведения о конструкторе копии см. в разделе Правила объявление конструкторов.
Если не объявляете конструктор копии, то компилятор создает участник- велемудрый конструктор копий. Если не объявляете оператор присваивания копий, то компилятор создает участник- велемудрый оператор присваивания копий. Объявление конструктор копии не подавляет компилятор- созданный оператор присваивания копий, и наоборот.Если имеется одно рекомендуется также реализовать другой так, что значение кода будет ясна.
Участник-велемудрое назначение предусматривано более подробно в Назначение и инициализация Memberwise.
Конструктор копий принимает аргумент типа имя класса**&**, где имя класса имя класса, для которого определяют конструктор.Например:
// spec1_copying_class_objects.cpp
class Window
{
public:
Window( const Window& ); // Declare copy constructor.
// ...
};
int main()
{
}
Примечание |
---|
Сделайте тип аргумента имя класса const& конструктора копии, если возможно.Это предотвращает конструктор копии от случайного изменения объекта, от которого он копирует.Она также включает копирование из объектов const. |