Вызов конструктора базового класса из конструктора класса-наследника. Наследование. ООП C++

แชร์
ฝัง
  • เผยแพร่เมื่อ 19 ธ.ค. 2024

ความคิดเห็น •

  • @SimpleCodeIT
    @SimpleCodeIT  7 ปีที่แล้ว +39

    *Друзья, если вы решили изучать программирование и подписались на канал - рекомендую вам нажать колокольчик чтобы никогда не пропускать новые уроки!*

  • @wuzahns5302
    @wuzahns5302 5 ปีที่แล้ว +194

    если хотите, чтобы параметры к конструктору В шли в конструктор А
    B(int a):A(a)

    • @Someone-ie6rd
      @Someone-ie6rd 5 ปีที่แล้ว +10

      Спасибо

    • @Користувач-ю2э
      @Користувач-ю2э 4 ปีที่แล้ว

      +1

    • @ДмитрийРаннев-л1у
      @ДмитрийРаннев-л1у 4 ปีที่แล้ว

      Можно это реализовать вне класса?

    • @Користувач-ю2э
      @Користувач-ю2э 4 ปีที่แล้ว +20

      @@ДмитрийРаннев-л1у Как и любую функцию-член:
      class Type : public base
      {
      public:
      Type(...); //просто объявление конструктора
      ...
      };
      // реализация вынесенная вне класса:
      Type::Type(...):base(...)
      {
      ....
      }

    • @lefteriszacharoullas6941
      @lefteriszacharoullas6941 ปีที่แล้ว +1

      Молодец спосибо

  • @Crotify
    @Crotify 3 ปีที่แล้ว +51

    Лайк я конечно поставлю, спасибо что сделали доброе дело. От себя добавлю то, о чём тут не рассказано. (см момент 7:01 ) Новички часто сталкиваются с затруднениями при описании конструктора дочернего класса ВНЕ ТЕЛА КЛАССА.
    А делать надо так:
    class B : public A
    {
    public:
    B(); // тут мы не пишем вызов конструктора класса A
    };
    B::B(): A("наше новое сообщение") // а тут пишем
    {
    }

    • @_Yes_.
      @_Yes_. 2 ปีที่แล้ว

      лооооооооооооооол ок

    • @gnot7900
      @gnot7900 ปีที่แล้ว +2

      Так давайте ещё разделим реализацию методов класса и их прототипы в отдельные файлы .cpp и .h соответственно. Так будет ещё не понятнее но зато ПРАВИЛЬНО!

  • @SimpleCodeIT
    @SimpleCodeIT  7 ปีที่แล้ว +24

    #конструкторбазовогокласса #ООП #SimpleCode #урокипрограммирования

  • @bakhtiiarasadov7885
    @bakhtiiarasadov7885 5 ปีที่แล้ว +9

    Сергей, Ваша способность доходчиво обьяснить просто поражает. Спасибо, ОГРОМНОЕ.

  • @Ermine882
    @Ermine882 7 ปีที่แล้ว +31

    Спасибо за урок

  • @sanya8028
    @sanya8028 ปีที่แล้ว +2

    Посмотрел уроки до этого, решил порешать задачи и столкнулся как раз с этой проблемой. Подумал, что не усвоил какие-то моменты, сразу зашёл на канал и увидел, что следующее видео как раз на эту тему:) Большое Спасибо!

    • @יאי
      @יאי 9 หลายเดือนก่อน

      А где задачки решал не подскажешь?

  • @vladalu9794
    @vladalu9794 6 ปีที่แล้ว +15

    Спасибо за отличный урок!

  • @ИванКозловский-ш9н
    @ИванКозловский-ш9н ปีที่แล้ว +3

    привет из 2023. Спасибо большое за уроки!

  • @СтепанТерещук
    @СтепанТерещук 5 ปีที่แล้ว +8

    Спасибо . Хорошо сделал видео уроки ! Жаль заданий нету

  • @antonmanin3521
    @antonmanin3521 4 ปีที่แล้ว +6

    божечки, мне это видео очень сильно помогло!
    спасибо больше!

  • @pr3454
    @pr3454 3 ปีที่แล้ว +3

    Сергей, спасибо за Ваши видео!

  • @d1cemovie
    @d1cemovie 7 ปีที่แล้ว +12

    При создании объекта класса "А" мы можем передать параметром строку, содержание которой будет присвоено полю "msg".
    А каким образом мы можем передать в поле "msg" объекта класса "B" строку, не копаясь в теле класса "B" (не проводя там никаких манипуляций с конструктором), а просто передав строку параметром, как с объектом класса "А"?

    • @tesseract8412
      @tesseract8412 6 ปีที่แล้ว +5

      тоже интересовал этот вопрос по мере просмотра видео
      не нашли ответа случайно?

    • @artemtereza669
      @artemtereza669 5 ปีที่แล้ว

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

    • @pubgr862
      @pubgr862 5 ปีที่แล้ว +1

      Artem Tereza а можно по подробнее с момента бесполезности наследования?

    • @pubgr862
      @pubgr862 5 ปีที่แล้ว

      Krechetulya не знаю актуален ли вопрос, но может через дружественный метод ?

    • @artemtereza669
      @artemtereza669 5 ปีที่แล้ว

      @@pubgr862 Не-а) я уже передумал, все норм с этим наследованием

  • @vladimirdiadichev6140
    @vladimirdiadichev6140 7 ปีที่แล้ว +17

    Спасибо

  • @segars9604
    @segars9604 ปีที่แล้ว

    Благодарю за бесценную работ!

  • @kola33258
    @kola33258 6 ปีที่แล้ว +8

    Спасибо за урок)

  • @ДанилТверской-ь8ф
    @ДанилТверской-ь8ф 5 ปีที่แล้ว +5

    странно что ты забыл упомянуть передачу параметров производного базовому классу через конструктора т.е.
    class B
    {
    public:
    B(){
    cout msg = msg;
    cout

    • @Youtube-pomoyka
      @Youtube-pomoyka 4 ปีที่แล้ว

      Видимо забыл, но до тебя уже указали на такую возможность.

    • @satisfiedCapybara
      @satisfiedCapybara 4 ปีที่แล้ว

      Спасибо

  • @ВладимирШестаков-ы3ч
    @ВладимирШестаков-ы3ч 6 ปีที่แล้ว +8

    благодарю вас!

  • @Amoeby
    @Amoeby 4 ปีที่แล้ว +4

    А при трёх и более уровнях наследования как вызывать определённые конструкторы на каждом этапе? Какой синтаксис будет?

    • @Alexey_Pe
      @Alexey_Pe 3 ปีที่แล้ว

      Наверно
      first ( int x ) { code... this->x=x/2 } // конструктор принимает цифру x
      second ( int y ):first ( y ) { code... this->y=x+6 } // конструктор принимает цифру y и отправляет как x для first
      three ( int z):second ( z ) { code... this->z=z } // конструктор принимает цифру z и отправляет как y для second
      создаю объект класса three
      three myObject( 10 );
      Итог:
      x = 5
      y = 16
      z = 10

  • @kyami8718
    @kyami8718 ปีที่แล้ว +1

    Для тех,кто мб что-то недопонял.
    Когда мы прописали B() : A(.....)
    По факту,вы компилятору говорите: так,ты сначала вызови конструктор базового класса А(....),а потом уже конструктор B()

  • @mishanus228
    @mishanus228 2 ปีที่แล้ว +1

    СЕРЁГА ТЫ ЛЕГЕНДА!

  • @АндрійБесарабець
    @АндрійБесарабець 4 ปีที่แล้ว +3

    похоже на перегрузку конструкторов)

  • @ГусейнСалахов
    @ГусейнСалахов 4 ปีที่แล้ว +4

    Спасибо за урок))

  • @dezign_er
    @dezign_er 7 ปีที่แล้ว +10

    Ну вот я и дошёл до "последнего видео". Просмотрел всё от первого по этого (#102) чуть меньше чем за два месяца, большое спасибо автору за труд, всё сказанное в уроках более чем понятно. У меня кстати возникла проблема, после последнего обновления visual studio, с созданием нового проекта. Когда создаю "консольное приложение windows" при последующей компиляции выдаёт ошибку связанную с (#include "stdafx.h"), а если просто создавать пустой проект, то при той же компиляции консоль мгновенно закрывается (и решения типа добавить system("pause") не помогают ). Ну а так всё отлично. Жду нового видео ! P.S. всё хорошо в этих урока, но одно всё же доставляет дискомфорт - это одна и та же композиция на фоне , жуть как приедается после пятого раза, но это только моё мнение.

    • @alexandrgrebnev3229
      @alexandrgrebnev3229 7 ปีที่แล้ว +3

      Ставь, х1.5 и её слышно не будет, я так и не услышал, что за композиция. Автору конечно же огромное спасибо, для переезда на плюсы, просто идеальные уроки. Жду следующих уроков, а пока займусь opencv.

    • @qriest104
      @qriest104 ปีที่แล้ว

      как сейчас успехи? Стал программистом?

  • @andreyandrey5835
    @andreyandrey5835 4 ปีที่แล้ว +4

    А если больше двух наследований тогда как происходит инициализация конструкторов других классах(если их там не один а несколько)?

  • @kaynsolo
    @kaynsolo 6 ปีที่แล้ว +4

    Very good!

  • @ЛЕОХАНЧИК
    @ЛЕОХАНЧИК 3 ปีที่แล้ว +3

    Здравствуйте,как можно создать класс прямоугольников rectangle

  • @annademidenko6356
    @annademidenko6356 6 ปีที่แล้ว +3

    👍

  • @frog_from_frogland
    @frog_from_frogland 3 ปีที่แล้ว +2

    спасибо)

  • @aleksandrdrobyshev7623
    @aleksandrdrobyshev7623 4 ปีที่แล้ว +1

    Ребят я чет не понял...
    В случае B():A("Наше новое сообщение") - сама строка текстовая как-бы фиксированная.
    Т.е. мы не можем создать объект b с любой желаемой строкой получается? Или я чего-то не понимаю...

    • @carteblanche9165
      @carteblanche9165 4 ปีที่แล้ว +6

      Можно
      B(string msg) : A(msg) {...}
      Так мы передаем строку msg в класс А, значит для класса А небходим констуктор:
      A(string msg) {...}

    • @sleepyNovember_project
      @sleepyNovember_project 11 หลายเดือนก่อน

      @@carteblanche9165 но чел был прав, если будет именно так как он описал, то точно не сможем xd

  • @НиколайОвчинников-д6э
    @НиколайОвчинников-д6э ปีที่แล้ว

    Nice video 🔥👍😎

  • @Mar_doK
    @Mar_doK 3 ปีที่แล้ว

    Спасибо!

  • @nikitasuyazov2060
    @nikitasuyazov2060 5 หลายเดือนก่อน

    Чтобы число тоже можно было передать:
    class A
    {
    public:
    A()
    {
    msg = "Пустое сообщение";
    }
    A(string msg)
    {
    this->msg = msg;
    }
    A(string msg, int a)
    {
    this->msg = msg;
    this->a = a;
    }
    void PrintMsg()
    {
    cout

  • @dimaan29
    @dimaan29 4 ปีที่แล้ว

    Ну, реально не пойму я эти наследования конструкторов. Я еще понимаю наследования полей, но наследование конструкторов только усложняет и запутывает. Кто, куда и откуда наследовал.

  • @ZnZ
    @ZnZ 7 ปีที่แล้ว

    А может ли класс А наследоваться от класса B, если класс B наследуется от класса A

    • @ISppsd
      @ISppsd 6 ปีที่แล้ว +14

      0_о
      Глупый вопрос. Это все равно, что ты бы сам радил себе отца

    • @pubgr862
      @pubgr862 5 ปีที่แล้ว +5

      ISppsd Official а вот тут уже сценарий для фильма)))

    • @ЛуизаЛихтер
      @ЛуизаЛихтер 5 ปีที่แล้ว +2

      @@ISppsd ...и лошади едят друг друга!

    • @ДмитрийКулявец-в5у
      @ДмитрийКулявец-в5у 5 ปีที่แล้ว

      @@pubgr862, а ведь похожий фильм сняли)))

    • @1___________________1-p4g
      @1___________________1-p4g 4 ปีที่แล้ว

      @@ISppsd 😂😂😂😂😂👌

  • @borisermolaev3158
    @borisermolaev3158 5 ปีที่แล้ว +6

    Пуставь вместо занудного метала 8-битки какие-нибудь. На манер кряков.
    At Doom's Gate(8bit) например.

  • @artyomkazakov9414
    @artyomkazakov9414 2 ปีที่แล้ว +3

    Спасибо тебе за всё. Нет войне!

    • @ВикторБаринов-с5е
      @ВикторБаринов-с5е ปีที่แล้ว +5

      Слава России

    • @pilipzero1149
      @pilipzero1149 3 หลายเดือนก่อน +2

      и сюда политикц впихнули

    • @WEiN-t5c
      @WEiN-t5c 2 หลายเดือนก่อน

      ​@@pilipzero1149он болеет😢

  • @Viamsupervadetvadens
    @Viamsupervadetvadens 7 ปีที่แล้ว +3

    up

  • @notnormal7827
    @notnormal7827 7 หลายเดือนก่อน

    2024

  • @tupoy_ytub_uberi_psevdonim
    @tupoy_ytub_uberi_psevdonim 3 ปีที่แล้ว

    я все рано не понял. пытаюсь передать а он мне говорит что нельзя string использовать

  • @Sergey-Primak
    @Sergey-Primak 4 ปีที่แล้ว

    почему у класса А может быть несколько конструкторов, а у Класса В нужно указывать явно какой конструктор Класса А будет вызываться?
    разве Класс В ущербнее Класса А?!

    • @Kokurorokuko
      @Kokurorokuko 3 ปีที่แล้ว

      Потому что прежде чем создать объект класса В, нужно создать объект класса А. Так что да, в каком-то смысле ущербнее.

  • @pavelios3577
    @pavelios3577 6 ปีที่แล้ว +12

    Спасибо за урок.

  • @C2H5OHH
    @C2H5OHH 3 ปีที่แล้ว +4

    Спасибо за урок!

  • @bama2619
    @bama2619 3 ปีที่แล้ว

    Спасибо,понятно。

  • @ЯрославГоловко-ф6и
    @ЯрославГоловко-ф6и 4 ปีที่แล้ว +1

    спасибо

  • @superhacker000
    @superhacker000 3 หลายเดือนก่อน

    👍

  • @Antonov_Ivan.
    @Antonov_Ivan. ปีที่แล้ว

    Спасибо за урок!

  • @ВітяКоміссаров
    @ВітяКоміссаров 2 ปีที่แล้ว +1

    спасибо