#8. Описание методов вне класса | Уроки ООП C++

Поделиться
HTML-код
  • Опубликовано: 20 сен 2024
  • Практический курс по ООП C++: stepik.org/a/2...
    Телеграм-канал: t.me/java_and_c
    Инфо-сайт: proproprogs.ru...
    Объявление класса в заголовочном файле, а реализации его методов в отдельном файле модуля.

Комментарии • 13

  • @donlinoleum831
    @donlinoleum831 6 месяцев назад +2

    Да, действительно очень полезный урок! Понятно, полезно и просто бомбезно! Спасибо)

  • @ГущинАндрей-ч5ы
    @ГущинАндрей-ч5ы 6 месяцев назад +3

    Очень полезный урок. Спасибо большое.

  • @andredru4278
    @andredru4278 4 месяца назад +2

    Спасибо. Понравился урок.

  • @AleksandrGurin
    @AleksandrGurin Месяц назад +1

    Здравствуйте, скажите а если в программе будет с десяток классов и для каждого будет написаны свои заголовочные файлы и файлы реализации, то надо будет перечислить все 10 файлов в строке для компилятора? А если в проекте сотни классов?

    • @selfedu_rus
      @selfedu_rus  Месяц назад

      IDE это обычно делают на автомате, когда создается проект. Либо, можно make файл прописывать и через него компилировать и собирать большие проекты. Подробности можно спросить в ТГ-канале по C/C++ (ссылка под видео).

  • @bioxoid
    @bioxoid 5 месяцев назад

    5:30
    #include
    class PointND {
    unsigned total {0};
    int *coords {nullptr};
    public:
    PointND() : total(0), coords(nullptr)
    { }
    PointND(unsigned sz) : total(sz)
    {
    coords = new int[total] {0};
    }
    PointND(int* cr, unsigned len) : PointND(len)
    {
    set_coords(cr, len);
    }
    PointND(const PointND& other) : PointND(other.coords, other.total)
    { }
    const PointND& operator=(const PointND& other);
    unsigned get_total() { return total; }
    const int* get_coords() { return coords; }
    ~PointND() { delete[] coords; }
    private:
    void set_coords(int* cr, unsigned len);
    };
    const PointND& PointND::operator=(const PointND& other)
    {
    delete[] coords;
    total = other.total;
    coords = new int[total];
    set_coords(other.coords, total);
    return *this;
    }
    void PointND::set_coords(int* cr, unsigned len)
    {
    for(unsigned i = 0; i < total; ++i)
    coords[i] = (i < len) ? cr[i] : 0;
    }
    int main()
    {
    PointND pt(5);
    return 0;
    }

  • @citizenfour2951
    @citizenfour2951 6 месяцев назад +1

    Спасибо за урок. Почему включение заголовочного файле в разные .cpp файлы не приведет к ошибке, если не-inline методы есть в .h файле? Ошибки нет, потому что тела одинаковые? Дубликат не будет удален оптимизирующим линкером?

    • @selfedu_rus
      @selfedu_rus  6 месяцев назад

      классы образуют свою область видимости и существуют в пределах модуля (их определение), поэтому и получается дублирование

    • @citizenfour2951
      @citizenfour2951 6 месяцев назад

      @@selfedu_rus дублирование это не ошибка неоднозначности?

    • @selfedu_rus
      @selfedu_rus  5 месяцев назад

      @@citizenfour2951в данном случае нет, т.к. область видимости класса ограничивается текущим модулем

  • @OlegMatrosov
    @OlegMatrosov 6 месяцев назад +1

    Ну и ну... Неужели кто-то описывает методы прямо в объявлении классов? Да никто так не делает.

    • @selfedu_rus
      @selfedu_rus  6 месяцев назад +1

      простые прописывают (однооператорные)

    • @OlegMatrosov
      @OlegMatrosov 6 месяцев назад

      @@selfedu_rus спасибо, кэп.