С++ для начинающих Конструктор класса Передача параметров в конструктор базового класса

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

В программировании очень часто приходится передавать параметры в какие-то функции. Вот может возникнуть необходимость передать параметр в базовый конструктор из основной программы. У начинающих с реализацией такой задачи могут возникнуть неприятные проблемы и куча вопросов.
На самом деле выполнение такой задачи очень просто, просто нужен пример. Где бы я не смотрел, везде ощущение, что авторы хотят запутать читающих. В качестве обучающего примера я буду передавать только один параметр в конструктор единственного класса. Чем меньше кода тем проще для начинающих понять принцип (так думаю я)

Для того чтоб понять этот пример нужно знать

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

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

Если всё ещё непонятно, то вы можете представить весь процесс в виде эстафеты:

В этом примере идёт эстафета: значение переменной а из функции main копируется в параметр конструктора. Переменная a внутри класса MyClass ничего общего с переменной a из функции main не имеет, это разные переменные. Мы копируем значение параметра конструктора в переменную класса.
Эстафета a(из main) -> value(внутри конструктора) -> a(класса)
Можно представить присваивание с конца: а(класса) = value (конструктора) = a(из main).

value конструктора — это отдельная локальная переменная внутри конструктора, можно сказать, что мост, обеспечивающий транзит данных.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

5 комментариев: С++ для начинающих Конструктор класса Передача параметров в конструктор базового класса

  • Anonymous говорит:

    Отлично описал.

  • Некто говорит:

    Я конечно сам нифига не знаю С++, да и изучал вначале Си шарп. Но вот опять для меня ошибкой считается возврат значения тут

    ;
    В этот раз visual studio не проматерился, но мы же опять используем невозвращаемый тип. Там более нам нечего возвращать. Возврат нужен, когда мы изменяем переменную. И если возвращать, то нужно так же указать в какой тип возвращается.
    Если я не прав, то можешь написать, что я последнее чмо )

    Автор сайта отвечает:
    тут если указывать тип функции void, то функция все равно возвращает void (Пустоту, ничего). Это даже без нашего участия. и Это не ошибка.
    другое дело, что можно не писать этот return.

    Возврат нужен, когда мы изменяем переменную.
    ================================
    По хорошему так: "Функция main всегда имеет определенный тип и возвращать значение должна всегда, Остальные функции и методы, которым определен определенный тип данных, должны возвращать объект того типа данных, который определен для функции (метода). если же им определен тип void, то они ничего не возвращают и прописывать return совсем не обязательно"

  • Аноним говорит:

    Автор, не понятно для чего в коде строчка:

    Как по мне, проще было так сделать:

    Автор сайта отвечает:
    Отмеченная строчка — это прототип.
    большая ли разница между
    MyClass obj1(a);
    и
    MyClass obj1(int);
    если у a тип int
    =============
    +Я объявил переменную obj как глобальную, вы как локальную.

    И еще пишите внимательнее. Ваша строчка 5 не соответствует действительности.

  • Anfrei говорит:

    не понимаю, что за obj1 и где он строчкой выше?
    MyClass obj(int);
    //Обратите внимание, что строчкой выше, в объект obj1 передается параметр int, который мы собираемся передать в конструктор объекта obj1. Если надо передать в 2 объекта, то было бы MyClass obj1(int),obj2(int); и далее по аналогии. Количество параметров и Тип который я передал в объект, я взял из прототипа описанного в конструкторе.

    Автор сайта отвечает:
    Это опечатка.
    Правильно так. Сразу во время объявления прототипа объекта obj, в прототипе указано, что объект obj будет с одним параметром int для передачи такого параметра в конструктор (параметра типа int).

    Прототип использовать не обязательно. Чуть выше этого комментария-ответа есть код от Анонима без использования прототипа.

    спасибо

  • Norfolk говорит:

    Никто, мне кажется, не пишет так:
    MyClass obj1=MyClass(a);
    Когда можно просто
    MyClass obj1(a);
    Так и короче и читается проще.

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

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Работа программиста и шамана имеет много общего - оба бормочут непонятные слова, совершают непонятные действия, и не могут объяснить, как оно работает

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок