Простые приложения на С++
January 16, 2023

Неявный и явный конструктор С++

Знаете ли вы, что существуют как явные, так и неявные конструкторы?

Давайте рассмотрим разницу между ними, когда их можно использовать в своём коде, чтобы код был более читаемым.

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

В некоторых компиляторах C++ вы можете увидеть предупреждения о необходимости указании явного конструктора.

Давайте рассмотрим пример явного конструктора:

#include <iostream>

class MyClass
{
    int num;

public:
    explicit MyClass(int i) : num(i) {}

    int getNum() const
    {
        return num;
    }
};

int main()
{

    auto clz = MyClass(2);

    std::cout << clz.getNum() << std::endl << std::endl;

    system("pause");
    return 0;
}

Вы должны инициализировать объект данного класса, конструктором этого класса с установленным значением параметра.

Неявный конструктор

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

Давайте посмотрим на пример:

#include <iostream>

class MyClass
{
    int num;

public:
    MyClass(int i) : num(i) {}

    int getNum() const
    {
        return num;
    }
};

int main()
{
    MyClass clz = 2;

    std::cout << clz.getNum() << std::endl << std::endl;

    system("pause");
    return 0;
}

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

Исходя из выше сказанного данный код имеет право на жизнь.

std::string my_string = "Wow, this is cool!";

Объяснить это можно тем, что существует неявный конструктор с std::string, который принимает в параметрах const char *, таким образом, позволяет этой инициализации быть действительной.

Заключение

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

Телеграмм