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

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

selfedu

selfedu

2 ай бұрын

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

Пікірлер: 14
@andredru4278
@andredru4278 Ай бұрын
Спасибо. Великолепный пример!
@user-bn5cf7uw3x
@user-bn5cf7uw3x 2 ай бұрын
Вектор. Начало. С нетерпением жду второй части)
@szapsis
@szapsis 2 ай бұрын
Спасибо большое за твой труд друг!
@donlinoleum831
@donlinoleum831 2 ай бұрын
Ну что же, очень ждем следующее занятие)
@giftingif7667
@giftingif7667 2 ай бұрын
Здравствуйте, Сергей. Скажите, планируются ли на канале какие-то обучающие видео по нейросетям (не по программированию, а по использованию). Про промпты, про какие-то необычные находки. Т.к. вы явно не могли мимо пройти всего того, что растёт каждый день как грибы и умение "разговаривать" с моделями сейчас очень важно будет в перспективе многих деятельностей.
@user-gi9vh4zy9r
@user-gi9vh4zy9r 2 ай бұрын
Спасибо очень круто. Делал все по видео, и была такая проблема что 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 2 ай бұрын
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 2 ай бұрын
@@selfedu_rus и еще глупый вопрос) а что именно дает возврат этого метода константной ссылки? const DArray& DArray::operator = (const DArray& other). то есть оператор присваивания возвращает объект, константный объект, верно? который мы , по идее, не можем изменить. верно?)
@selfedu_rus
@selfedu_rus 2 ай бұрын
да, его и не нужно менять, это же присваиваемое значение
@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; }
Must-have gadget for every toilet! 🤩 #gadget
00:27
GiGaZoom
Рет қаралды 7 МЛН
Luck Decides My Future Again 🍀🍀🍀 #katebrush #shorts
00:19
Kate Brush
Рет қаралды 2,5 МЛН
DELETE TOXICITY = 5 LEGENDARY STARR DROPS!
02:20
Brawl Stars
Рет қаралды 22 МЛН
Функции С++ с неограниченным числом аргументов
6:26
Оксана Еськова. Основы программирования
Рет қаралды 213
Основы Asyncio
53:25
Python Russian
Рет қаралды 12 М.
Must-have gadget for every toilet! 🤩 #gadget
00:27
GiGaZoom
Рет қаралды 7 МЛН