конструктор копирования
В C++ функция с тем же именем, что и имя класса, и чьи формальные параметры являются ссылочными типами объектов этого класса, называется конструктором копирования . Как и конструктор, система автоматически генерирует его, когда мы не определяем его активно. выполнить соответствующие простые назначения между двумя членами объекта, используемые для инициализации объекта, например, в следующей ситуации:
#include<iostream>usingnamespacestd;#definePI3.1415classCircle{private:doubleR;public:Circle(doubleR);Circle(Circle&A);doublearea();doublegirth();};Circle::Circle(doubleR){cout<<Constructor <<endl;this->R=R;}Circle::Circle(Circle&A){cout<<CopyConstructor<<endl;this->R=AR;}doubleCircle::area(){returnPI*R*R;} doubleCircle::girth(){return2*PI*R;}intmain(){CircleA(5);CircleB(A);return0;}
В этом примере определяется класс Circle, а также конструктор с параметрами и конструктор копирования соответственно. Затем в основной функции определяется объект A, передается начальное значение и вызывается конструктор с параметрами. Определите объект B и инициализируйте объект B через объект A. Результаты бега следующие:
Объект A, определенный впервые, вызывает конструктор с параметрами, а второй объект B инициализируется через объект A, поэтому вызывается конструктор копирования.
Пожалуйста, попробуйте также на своем компьютере.
У вас могут возникнуть вопросы. В начале мы упоминали, что если мы не определяем конструктор копирования активно, он будет сгенерирован автоматически, так почему же мы должны определять его самостоятельно? Это связано с тем, что конструктор копирования по умолчанию выполняет только простые назначения. В некоторых случаях могут возникнуть проблемы, связанные с глубоким копированием и поверхностным копированием . Мы подробно познакомим вас с этим в следующем разделе.