Явный вызов конструктора

Конструктор класса вызывается ав­томатически при объявлении объекта класса. Это вовсе не означает, что после создания объекта нельзя еще раз вызвать конструктор. Для по­нимания механизмов возможного использования конструктора (кроме автоматического его вызова при объявлении объекта) необходимо при­нять к сведению, что вызов конструктора подразумевает создание объ­екта соответствующего класса. Если конструктор вызывается при объявлении объекта, то созданный в результате вызова конструктора объект фактически является объявляемым объектом. Несколько иная ситуация при вызове конструктора после создания объекта. Речь идет о команде вида объект=конструктор (аргументы), В этом случае инструкцией конструктор (аргументы) в соответствии с переданными конструкто­ру аргументами создается новый безымянный объект, а потом этот объект присваивается в качестве значения объекту, указанному слева от операто­ра присваивания. Напомним, что при присваивании объектов выполняется побитовое копирование. После копирования безымянный объект удаляется из памяти.
#include 
using 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;
}
Онлайн всего: 1
Гостей: 1
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте