Рубрики

Когда называются конструкторы?

Когда конструкторы вызываются для различных типов объектов, таких как глобальный, локальный, статический локальный, динамический?

1) Глобальные объекты: для глобального объекта конструктор вызывается до вызова main (). Например, посмотрите следующую программу и вывод:

#include<iostream>

using namespace std;

  

class Test

{

public:

  Test();

};

  
Test::Test()  {

    cout << "Constructor Called \n";

}

  
Test t1;

  

int main() {

    cout << "main() started\n";

    return 0;

}
/* ВЫХОД:

      Конструктор называется

      main () запущен

* /

2) Область действия функции или блока (автоматические переменные и константы) Для нестатического локального объекта конструктор вызывается, когда выполнение достигает точки, где объект объявлен. Например, посмотрите следующую программу и вывод:

using namespace std;

  

class Test

{

public:

  Test();

};

  
Test::Test()  {

    cout << "Constructor Called \n";

}

  

void fun() {

  Test t1;

}

  

int main() {

    cout << "Before fun() called\n";

    fun();

    cout << "After fun() called\n";

    return 0;

}
/* ВЫХОД:

       Перед приколом () позвонил

       Конструктор называется

       После веселья () позвонил

* /

Для локального статического объекта выполнение в первый раз (и только в первый раз) достигает точки, в которой объект объявлен. Например, вывод следующей программы:

#include<iostream>

using namespace std;

  

class Test

{

public:

  Test();

};

  
Test::Test()  {

    cout << "Constructor Called \n";

}

  

void fun() {

  static Test t1;

}

  

int main() {

    cout << "Before fun() called\n";

    fun();

    cout << "After fun() called\n";

    fun();  // конструктор не вызывается на этот раз.

    return 0;

}
/* ВЫХОД

       Перед приколом () позвонил

       Конструктор называется

       После веселья () позвонил

* /

3) Область действия класса: при создании объекта компилятор обеспечивает вызов конструкторов для всех его подобъектов (его член и унаследованные объекты). Если у членов есть конструкторы по умолчанию или конструктор без параметров, то эти конструкторы вызываются автоматически, в противном случае параметризованные конструкторы можно вызывать с помощью списка инициализатора . Например, см. ПРОГРАММА 1 и ПРОГРАММА 2 и их вывод.

// ПРОГРАММА 1: Constrcuctor без каких-либо параметров
#include<iostream>

using namespace std;

  

class A

{

public:

  A();

};

  
A::A() {

    cout << "A's Constructor Called \n";

}

  

class B

{

  A t1;

public:

  B();

};

  
B::B() {

    cout << "B's Constructor Called \n";

}

  

int main() {

    B b;

    return 0;

}
/* ВЫХОД:

      Конструктор А называется

      Вызывается конструктор B

* /

// ПРОГРАММА 2: Constrcuctor с параметром (используя список инициализаторов)
#include <iostream>

using namespace std;

  

class A

{

public:

    int i;

    A(int );

};

  

A::A(int arg)

{

    i = arg;

    cout << "A's Constructor called: Value of i: " << i << endl;

}

  
// Класс B содержит объект A

class B

{

    A a;

public:

    B(int );

};

  

B::B(int x):a(x)

{

    cout << "B's Constructor called";

}

  

int main()

{

    B obj(10);

    return 0;

}
/* ВЫХОД

       Конструктор А называется: Значение i: 10

       Конструктор Б называется

* /

4) Динамические объекты: для динамически размещаемого объекта конструктор вызывается оператором new. Например, смотрите следующую программу и вывод.

#include<iostream>

  

using namespace std;

  

class Test

{

public:

  Test();

};

  
Test::Test()  {

    cout << "Constructor Called \n";

}

  

int main()

{

    cout << "Before new called\n";

    Test *t1 = new Test;

    cout << "After new called\n";

    return 0;

}
/* ВЫХОД

      Перед новым звонил

      Конструктор называется

      После нового звонил

* /

Ссылки:
http://web.cs.wpi.edu/~cs2303/c10/Protected/Lectures-C10/Week5_MoreClasses.ppt

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Когда называются конструкторы?

0.00 (0%) 0 votes