#14. Переопределение операции присваивания | Уроки ООП C++

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

КОМЕНТАРІ • 14

  • @andredru4278
    @andredru4278 15 днів тому +1

    Спасибо. Великолепный пример!

  • @szapsis
    @szapsis Місяць тому +3

    Спасибо большое за твой труд друг!

  • @user-bn5cf7uw3x
    @user-bn5cf7uw3x Місяць тому +2

    Вектор. Начало. С нетерпением жду второй части)

  • @donlinoleum831
    @donlinoleum831 Місяць тому +2

    Ну что же, очень ждем следующее занятие)

  • @giftingif7667
    @giftingif7667 Місяць тому +1

    Здравствуйте, Сергей. Скажите, планируются ли на канале какие-то обучающие видео по нейросетям (не по программированию, а по использованию). Про промпты, про какие-то необычные находки. Т.к. вы явно не могли мимо пройти всего того, что растёт каждый день как грибы и умение "разговаривать" с моделями сейчас очень важно будет в перспективе многих деятельностей.

  • @user-gi9vh4zy9r
    @user-gi9vh4zy9r Місяць тому +1

    Спасибо очень круто. Делал все по видео, и была такая проблема что capacity после 1 итерации принимал значение сразу 30, плюс были синтаксическая ошибка наверное в команде int *p = new int[capacity]; а писал так int *p = new int{capacity}; оказывается это походу ошибка. А проблему с capacity исправил в 8 строке файла darray.cpp на while (capacity < size_new).
    Спасибо еще раз, смотрю, вникаю, нравиться!!!

    • @selfedu_rus
      @selfedu_rus  Місяць тому

      int *p = new int{capacity};
      создает переменную типа int со значением capacity )) Успехов!

  • @catsaur5991
    @catsaur5991 Місяць тому +2

    Друзья, а почему на 13:05 мы можем сделать return other ? Ведь разве мы не возвращаем ссылку на созданный объект? А у объекта other ведь другой адрес, это ведь отличный объект от *this ?

    • @selfedu_rus
      @selfedu_rus  Місяць тому +2

      без разницы, можно и *this вернуть, смысл, что после присваивания состояния обоих объектов равны и возврат делаем, чтобы операция работала по цепочке a = b = c = d

    • @catsaur5991
      @catsaur5991 Місяць тому

      @@selfedu_rus и еще глупый вопрос) а что именно дает возврат этого метода константной ссылки? const DArray& DArray::operator = (const DArray& other). то есть оператор присваивания возвращает объект, константный объект, верно? который мы , по идее, не можем изменить. верно?)

    • @selfedu_rus
      @selfedu_rus  Місяць тому

      да, его и не нужно менять, это же присваиваемое значение

  • @bioxoid
    @bioxoid Місяць тому

    course.cpp
    #include
    #include "darray.h"
    int main()
    {
    DArray ar1, ar2;
    for(int i=0; i < 10; ++i)
    ar1.push_back(i+1);
    ar2 = ar1;
    std::cout

    • @bioxoid
      @bioxoid Місяць тому

      darray.h
      #ifndef _DARRAY_H_ // youtube auto, write without "space":( _ D A R R A Y _ H _)
      #define _DARRAY_H_
      class DArray {
      enum {
      start_length_array = 8, // начальная длина массива
      resize_factor = 2, // множитель для увеличения длины массива
      max_length_array = 30, // максимальная длина массива
      value_error = 2123456789, // специальное значение для обозначения ошибки данных
      };
      int *data {nullptr};
      int length {0};
      int capacity {0};
      void _resize_array(int size_new);
      public:
      DArray() : length(0), capacity(start_length_array)
      {
      data = new int[capacity];
      }
      DArray(const DArray& other) : length(other.length), capacity(other.capacity)
      {
      data = new int[capacity];
      for(int i = 0; i < length; ++i)
      data[i] = other.data[i];
      }
      ~DArray() { delete[] data; }
      int size() const {return length; }
      int capacity_ar() const {return capacity; }
      const int* get_data() const {return data; }
      const DArray& operator=(const DArray& other);
      void push_back(int calue);
      int pop_back();
      };
      #endif

    • @bioxoid
      @bioxoid Місяць тому

      darray.cpp
      #include "darray.h"
      void DArray::_resize_array(int size_new)
      {
      if(size_new = max_length_array) {
      capacity = max_length_array;
      break;
      }
      }
      int *p = new int[capacity];
      for(int i = 0; i < length; ++i)
      p[i] = data[i];
      delete[] data;
      data = p;
      }
      const DArray& DArray::operator=(const DArray& other)
      {
      if(this == &other)
      return other;
      length = other.length;
      capacity = other.capacity;
      delete[] data;
      data = new int[capacity];
      for(int i = 0; i < length; ++i)
      data[i] = other.data[i];
      return other;
      }
      void DArray::push_back(int value)
      {
      if(length >= capacity)
      _resize_array(capacity * resize_factor);
      if(length < capacity)
      data[length++] = value;
      }
      int DArray::pop_back()
      {
      if(length > 0)
      return data[--length];
      return value_error;
      }