Явный вызов конструктора
Конструктор класса вызывается автоматически при объявлении объекта класса. Это вовсе не означает, что после создания объекта нельзя еще раз вызвать конструктор. Для понимания механизмов возможного использования конструктора (кроме автоматического его вызова при объявлении объекта) необходимо принять к сведению, что вызов конструктора подразумевает создание объекта соответствующего класса. Если конструктор вызывается при объявлении объекта, то созданный в результате вызова конструктора объект фактически является объявляемым объектом. Несколько иная ситуация при вызове конструктора после создания объекта. Речь идет о команде
вида объект=конструктор (аргументы), В этом случае инструкцией конструктор (аргументы) в соответствии с переданными конструктору аргументами создается новый безымянный объект, а потом этот объект присваивается в качестве значения объекту, указанному слева от оператора присваивания. Напомним, что при присваивании объектов выполняется побитовое копирование. После копирования безымянный объект удаляется из памяти.
#includeusing namespace std; //Класс с закрытым полем, конструктором и деструктором: class Demo{ int n; public: Demo(int m){ n=m; cout << "Constructor: " << this << endl;} void setn(int m){n=m;} void getn(){ cout << "n = " << n << endl; cout << "Object: " << this << endl; } ~Demo(){ cout << "Destructor: " << this << endl;} }; int main(){ //Создание объекта: Demo a(1); //Создание объекта с явным вызовом конструктора: Demo b=Demo(2); //Проверка значений: a.getn(); b.getn(); //Изменение значения поля с помощью метода класса: a.setn(-1); //Проверка значений: a.getn(); //Копирование объектов: a=b; //Проверка результата копирования: a.getn(); //Изменение значения поля с помощью конструктора: a=Demo(0); //Проверка результата: a.getn(); return 0; }