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

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

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

  • @andredru4278
    @andredru4278 6 дней назад +1

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

  • @user-bn5cf7uw3x
    @user-bn5cf7uw3x 2 месяца назад +2

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

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

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

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

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

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

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

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

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

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

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

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

    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;
    }

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

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

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

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

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

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