С++ для начинающих Конструктор Класса

В С++ класс имеет несколько конструкторов. Поскольку мы только знакомимся с классами, все конструкторы сразу описывать не буду. Опишу самый простой: конструктор по умолчанию. Имейте в виду, что кроме конструктора по умолчанию есть другие конструкторы.
Первый и самый логичный вопрос: "Что такое конструктор в C++?".

Определение из Википедии:

  • В объектно-ориентированном программировании конструктор класса (от англ. constructor, иногда сокращают ctor) — специальный блок инструкций, вызываемый при создании объекта.

Ага, прочитал такое и понял всё сразу, как же. Думаю, мало кому понятно такое определение. Попробовал ещё поискать:

  • Конструктор C++ — это особый метод, имеющий имя, совпадающее с именем класса.
  • Конструктор — это помощник инициализации элементов класса для инициализации их внутри класса.
То, что конструктор имеет имя — враньё. У конструктора нет имени. Он как безымяная переменная, у которой есть только тип. Т. е. в синтаксисе С++ для описания конструктора используется тип, где этот тип только собственный класс, пропущенное имя, скобки параметров, скобки кода выполнения. Но мне ради вашего понимания придётся немного поврать в этом. Т. е. будем временно считать, что у конструктора действительно есть имя и оно совпадает с названием класса.
Посмотрим пример:

В общем код достаточно простой, но думаю для начинающих нужен подробный разбор.
Конструкторы в С++ играют роль внедренцев в сам процесс создания объектов. В нашем случае объект объявлен глобально. Процесс создания глобальных объектов выполняется до начала работы функции main, поэтому в данном случае сначала работает сборка объявленного объекта, а только потом потом очистка экрана. Благодаря конструктору можно внедриться в процесс момента создания объекта, обозначив объекту или первичное значение данных, или первичное поведение. Обычно конструкторы используют только для инициализации внутрених для класса данных. По той причне, что очистка экрана выполняется после производства компилятором работ по сборке объекта, первая очистка экрана, из листинга #1, может давать элемент холостого хода: как будто бы не работает. По той же причине очистку экрана глобального объекта лучше делать после объявления глобальных объектов.
  • В С++ имя конструктора должно совпадать с именем класса.
  • Допускается использовать несколько конструкторов с одинаковым именем, но различными параметрами.
  • Конструктор по умолчанию — это конструктор с пустым списком параметров, т. е. с пустыми круглыми скобками.
  • Конструктором по умолчанию может быть любой конструктор, каждый параметр которого имеет аргумент по умолчанию.
С этого момента считаем, что заблуждались, но осознали, что у конструктора нет имени.

Конструктор по умолчанию срабатывает в момент объявления объекта, если объекту не указывать скобок. Это отображено в листинге #2.1. Только не запутайтесь: в описании класса куглые скобки есть, в объявлении объекта их нет.
Есть вариант ошибиться и использовать для вызова конструктора по умолчанию круглые скобки:

Показанная ошибка может встречаться у некоторых новичков. Запомните, что конструктор по умолчанию для своего запуска пустых круглых скобок не требует. С пустыми круглыми скобками мы получаем объявление функции, возвращающей объект, тип которого указанный класс.

В общем, постарайтесь не угодить в такую ловушку.
Обычно конструкторы класса помещают в public.

Конструктор схож с методом, но отличается от метода тем, что нет у него имени и он не возвращает никакого типа, даже void не возвращает. На всякий случай напомню, что методами часто называют функции, описанные внутри класса.
Резюмируем наиболее важное и даю знать то, о чём написано не было:

  • Прямая инициализация элементов класса при описании класса не допускается. (В современном С++, кажется с С++11 этот момент изменён, стало можно)
  • Конструктор — это помощник инициализации элементов класса для инициализации их внутри класса.
  • Конструктор класса предназначен для присваивания начального значения элементу класса вовнутрь класса.
  • Конструктор — специальный вид инструкций, вызываемый во время создания объекта.
  • Конструктор выполняется только один раз. В момент создания объектов.
  • Конструктор не имеет имени, но создаётся видимость, что его имя — название класса.
  • Конструктор автоматически вызывается при создании объекта (создании экземпляра класса).
  • Конструктор никогда не возвращает значение.
  • Если в классе есть static переменная (или объект), то такой объект будет сконструирован до функции main, также до начала работы функции main будет сконструирована глобальная переменная (или глобальный объект).


  • Есть несколько разновидностей конструкторов.
  • Обычно конструкторы описывают в public секции класса. Но есть случаи, когда их закрывают в private

14 комментариев на «“С++ для начинающих Конструктор Класса”»

  1. Kazan_siti:

    Очень хорошо описанно!Спасибо.

  2. Ardent:

    супер! то что надо!

  3. Алексей:

    И правда супер! Огромное спасибо, очень помогло…

  4. Костя:

    Супер, спасибо большое!)

  5. Мне одному кажется или Админы на сайте вырезают все плохие коменты?

    На самом деле все очень доступно описано специально для такого как я жирного нечего несмыслящего парня. СПАСИБО!!!

  6. eva:

    Вы — СУПЕР!!!

  7. Аноним:

    невозможно обратиться к private член, объявленному в классе

  8. Alex:

    Конструктор – специальный вид инструкций, вызываемый во время вызова объекта

    как я понимаю правильнее : «вызываемый во время создания объекта»

     

  9. damir:

    И правда супер! Огромное спасибо, очень помогло…

  10. Александр:

    Скажите насколько точно это утверждение :
    Объекты конструируются до входа в функцию main();
    Я взял его в заключении главы. Я создаю объекты в main()

    • Когда-то я где-то такое прочитал, именно так и было написано, но это не так и будет исправлено.
      Вот так написано в стандарте в русском переводе:

      3.6.1. Функция main
      main function
      1 Программа должна содержать глобальную функцию с именем main, которая обозначает начало программы. Требуется ли, чтобы во freestanding-окружении программа содержала описание функции main, зависит от реализации.
      Замечание. В независимом окружении (комментарий: см 1.4, §7 ■ ) действия перед стартом программы и при ее завершении считаются зависящими от реализации; действия перед стартом включают выполнение конструкторов из области действия пространства имен со статическим классом памяти; завершение включает выполение деструкторов для объектов со статическим классом памяти. ■

      Если говорить проще, то "Если в классе есть static переменная (или объект), то такая переменная (или такой объект) будут сконструированы до начала работы функции main, также до начала работы функции main будет сконструирована глобальная переменная (или глобальный объект)".

  11. Денис:

    до этого урока всё было понятно, а в этом уроке ничего не понял! 👿

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

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

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/oleg-kalashnikov/assembler-eto-prosto-uchimsya-programmirovat/?lfrom=15589587
Яндекс.Метрика