Почему конструктор не вызывается

0

В этой программе "Конструктор с именем" печатает 2 раза. Я сомневаюсь, почему "конструктор под названием" не печатает с

A b = B::getA(); 

при печати

A a;

В обоих случаях мы создаем новый объект.

Вот моя программа:

#include <iostream>
using namespace std;

class A
{
    public:
    A() { cout << "A constructor called " << endl;  }
};

class B
{
    static A a;
    public:
    B() { cout << "B constructor called " << endl; }
    static A getA() { return a; }
};

A B::a;  // definition of a

int main()
{
    A a; 
    A b = B::getA();
    return 0;
}
Теги:
static

4 ответа

3

Первый конструктор вызывается при запуске программы, когда A статический A внутри B

Второй конструктор вызывается внутри вашей main когда A выделяется в стеке.

Больше вызовов для конструктора A по умолчанию больше нет. Когда вы вызываете getA(), будет использоваться конструктор копирования, который, как вы еще не определили, будет предоставлен компилятором.

2

Потому что getA() вызывает конструктор копирования, который вы не написали, поэтому будет вызываться по умолчанию.

1
A b = B::getA();

Это инициализирует b используя конструктор копирования. Вы только отслеживаете конструктор по умолчанию, который здесь не используется. Если вы также хотите проследить конструктор копирования, вам нужно будет указать один:

A(A const &) { cout << "A copy constructor called " << endl; }
0

один contructore вызывается со "статическим A a" и "AB :: a", т.е. статической инициализацией a, являющейся членом класса B

во время выполнения программы в C, C++ все глобальные и статические переменные сначала инициализируются.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню