Основы программирования на С++ для начинающих

Перегруженный конструктор класса

В статье Конструктор и деструктор класса мы уже встречались с перегруженным конструктором в коде, но не акцентировали на этом внимание. Перегрузка конструкторов очень схожа с перегрузкой функций. Конструкторов в определяемом классе может быть несколько – по мере необходимости. Они должны иметь одинаковое имя, идентичное имени класса и обязательно должны отличаться сигнатурой.

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

Рассмотрим пример:

перегруженный конструктор класса с++, основы программирования для начинающих, c++ с нуля На этом примере достаточно легко увидеть, чем вызвана необходимость перегрузки конструкторов. Основной смысл в том, чтобы дать возможность программисту выбрать наиболее подходящий способ инициализации объекта.

Тут представлен самый распространенный вариант перегрузки конструкторов. А именно конструктор с параметрами и второй без параметров. Часто, программисту бывают необходимы оба подобных конструктора, так как конструктор с параметрами удобно использовать, работая с одиночными объектами. Но он не может быть использован, например, для инициализации  динамического массива объектов класса.

При каждом объявлении объекта класса надо применять соответствующий определённым конструкторам способ объявления.

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

Хочется добавить, что деструктор, в отличии от конструктора, перегружен быть не может, так как он никаких параметров не принимает.

2 thoughts on “Перегруженный конструктор класса

  1. Здесь хорошо бы добавить:
    – если вы описываете класс без описания конструктора вообще, то для класса создаётся конструктор по умолчанию без параметров;
    – но как только вы добавляете хотя бы один конструктор, умалчиваемый конструктор без параметров уж не создаётся (это может потом озадачить при создании объектов);
    – если же всё-таки нужен и конструктор без параметров, в том числе, то его нужно описать явно.

    И ещё…
    Часто вместо описания нескольких конструкторов удобно создать один конструктор, но с несколькими параметрами, определёнными с умалчиваемыми значениями:

    class my {
    my( int first = 0, float second = 1.0, char *title = "object" ) {
    // ...
    }
    }
    ...
    my m1(), m2( 3 ), m3( 4, -5.5 ), m4( 5, 1.0, "new_object" );

  2. В свое время сбивало с толку слово “перегруженный”-зачем его перегружают, почему так не любят? Потом объяснил себе, что это переЗАгруженный.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *