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

  Рет қаралды 1,119

selfedu

selfedu

Ай бұрын

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

Пікірлер: 14
@andredru4278
@andredru4278 5 күн бұрын
Спасибо. Великолепный пример!
@szapsis
@szapsis Ай бұрын
Спасибо большое за твой труд друг!
@user-bn5cf7uw3x
@user-bn5cf7uw3x Ай бұрын
Вектор. Начало. С нетерпением жду второй части)
@donlinoleum831
@donlinoleum831 Ай бұрын
Ну что же, очень ждем следующее занятие)
@giftingif7667
@giftingif7667 Ай бұрын
Здравствуйте, Сергей. Скажите, планируются ли на канале какие-то обучающие видео по нейросетям (не по программированию, а по использованию). Про промпты, про какие-то необычные находки. Т.к. вы явно не могли мимо пройти всего того, что растёт каждый день как грибы и умение "разговаривать" с моделями сейчас очень важно будет в перспективе многих деятельностей.
@user-gi9vh4zy9r
@user-gi9vh4zy9r Ай бұрын
Спасибо очень круто. Делал все по видео, и была такая проблема что 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 Ай бұрын
Друзья, а почему на 13:05 мы можем сделать return other ? Ведь разве мы не возвращаем ссылку на созданный объект? А у объекта other ведь другой адрес, это ведь отличный объект от *this ?
@selfedu_rus
@selfedu_rus Ай бұрын
без разницы, можно и *this вернуть, смысл, что после присваивания состояния обоих объектов равны и возврат делаем, чтобы операция работала по цепочке a = b = c = d
@catsaur5991
@catsaur5991 Ай бұрын
@@selfedu_rus и еще глупый вопрос) а что именно дает возврат этого метода константной ссылки? const DArray& DArray::operator = (const DArray& other). то есть оператор присваивания возвращает объект, константный объект, верно? который мы , по идее, не можем изменить. верно?)
@selfedu_rus
@selfedu_rus Ай бұрын
да, его и не нужно менять, это же присваиваемое значение
@bioxoid
@bioxoid 27 күн бұрын
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 27 күн бұрын
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 27 күн бұрын
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; }
Введение в язык программирования Go
1:36:18
Computer Science Center
Рет қаралды 84 М.
Stupid man 👨😂
00:20
Nadir Show
Рет қаралды 29 МЛН
YouTube's Biggest Mistake..
00:34
Stokes Twins
Рет қаралды 76 МЛН
it takes two to tango 💃🏻🕺🏻
00:18
Zach King
Рет қаралды 20 МЛН
Интерфейсы в Python
14:45
Денис Бречка
Рет қаралды 6 М.
Stupid man 👨😂
00:20
Nadir Show
Рет қаралды 29 МЛН