Создание экземпляра класса с помощью ()


У меня есть вопрос : какой конструктор используется, когда вы создаете экземпляр класса с ClassName instance() в C++ ?

Пример:

#include <iostream>

using namespace std;

class Test
{
private:
    Test()
    {
        cout << "AAA" << endl;
    }

public:
    Test(string str)
    {
        cout << "String = " << str << endl;
    }
};

int main()
{
    Test instance_1(); // instance_1 is created... using which constructor ?
    Test instance_2("hello !"); // Ok

    return 0;
}

Спасибо !

2 5

2 ответа:

Хитро! Вы ожидаете, что компиляция завершится неудачей, поскольку конструктор по умолчанию является частным. Однако он компилируется, и ничего не создается. В чем причина?

Test instance_1();

... это просто объявление функции! (Который возвращает Test и ничего не берет.)

Оператор Test instance_1(); вообще не вызывает конструктор, потому что он не определяет переменную - вместо этого он объявляет функцию с именем instance_1, которая возвращает объект типа Test. Чтобы создать экземпляр с помощью конструктора 0 аргументов, следует использовать Test instance_1;.