#include <iostream>
using namespace std;
class A
{
int x;
public:
A() { cout << "A's constructor called " << endl; }
};
class B
{
static A a;
public:
B() { cout << "B's constructor called " << endl; }
static A getA() { return a; }
};
A B::a; // definition of a
int main()
{
B b1, b2, b3;
A a = b1.getA();
return 0;
}
Выход:
конструктор назвал
конструктор Б называется
конструктор Б называется
конструктор Б называетсяПочему конструктор статического члена вызывается перед конструктором содержащего класса?
Я не могу понять, как мы получили выше вывод и как объект объявлен в 1-й класс в классе 2-й.
Почему, по вашему мнению, результат неправильный? – drescherjm
Объявление 'static'' A' в классе 'B' вызывает вызов первого конструктора. Компилятор будет генерировать код для инициализации глобальных и * статических * переменных перед вызовом 'main'. –
Если вы пройдете через свой код с помощью отладчика, должно стать довольно понятно, почему он ведет себя так. 'static A a;' является статическим объектом и будет экземпляр один раз для всех экземпляров 'B'. –