3 (Семинары и упражнения)

PDF-файл 3 (Семинары и упражнения) Информатика (4441): Семинары - 2 семестр3 (Семинары и упражнения) - PDF (4441) - СтудИзба2019-04-28СтудИзба

Описание файла

Файл "3" внутри архива находится в папке "Семинары и упражнения". PDF-файл из архива "Семинары и упражнения", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Семинар 3. Инкапсуляция и абстрагирование. Классы.Класс представляет собой наиболее важное изменение в языке С++, предназначенное дляреализации методов ООП. Он обеспечивает представление и сокрытие данных, связываетданные с методами их обработки, предоставляет пользовательский интерфейс доступа кданным и возможность повторного использование кода, и все вышеперечисленноеупорядочивает в компактное образование (инкапсулирует).1. Объявление класса. Собственный и общедоступный разделы.

Данные и методыкласса.class Vector // объявление класса Vector (2D вектор){private: // частный раздел (по умолчанию, можно опустить)double x; // данные классаdouble y;public:// публичный разделvoid show(); // прототип метода (функции-элемента) классаvoid set(double, double); //(интерфейс)};2.

Определение методов класса. Оператор принадлежности ::void Vector::set(double xx, double yy){x = xx;y = yy;}void Vector::show(){cout << "x = " << x << ", y = " << y;}3. Использование классов: создание объектов класса, вызов общедоступных методовvoid main(){Vector v1; // создание объекта v1 (экземпляра класса Vector)v1.set(1.1, 2.2); // вызов методаv1.show(); // x = 1.1 y = 2.2}4. Некоторые особенности4.1 Вызов в функции main() метода show() без указания объекта:show();приведет к ошибке.

Однако внутри другого метода это допустимо. В этом случае объектом по умолчаниюявляется тот объект, для которого вызван первый метод:void Vector::set(double xx, double yy){x = xx;y = yy;show(); // так можно}4.2 Публичные данные и собственные методы.class Vector{private:double x;void show();public:double y;void set(double, double);};void main(){Vector v1;v1.set(1.1, 2.2);cout << v1.y; // можно, т.к. y объявлено в общедоступном разделеcout << v1.х; // ошибка, т.к. x объявлено в собственном разделеv1.show(); // ошибка, т.к.

show является общедоступным методом}Примечание: при этом вызов show() в методе set() по-прежнему возможен.5. КонструкторыВ Си++ базовых типов и структур могут быть легко инициализированы в момент ихобъявления, например:struct Vec {double x; double y;};Vec v = {1.1, 1.2};Для объектов так сделать нельзя, в частности, и потому, что данные класса могутнаходиться в собственном разделе и являться недоступными. Для решения этой проблемыв Си++ зарезервированы специальные функции – конструкторы. Это такие функции,имена которых совпадают с именем класса, а вызываются они автоматически в моментсоздания объекта.

Возвращаемый тип у конструкторов не указывается!class Vector // объявление класса Vector{private: // частный раздел (по умолчанию, можно опустить)double x; // данные классаdouble y;public:// публичный разделvoid show(); // прототип метода классаvoid set(double, double);Vector(double, double); // прототип конструктора};Vector::Vector(double xx, double yy){x = xx;y = yy;}void Vector::set(double xx, double yy){x = xx;y = yy;}2void Vector::show(){cout << "x = " << x << ", y = " << y;}void main(){Vector v1 = Vector(1.1, 2.2);//создание объекта v1, вызывается конструктор с двумя аргументамиVector v2(1.2, 2.3); // компактная форма, неявный вызов конструктораv1.show();v2.show();}Конструкторы, также как и обычные функции, могут быть перегружены или иметьпараметры со значениями по умолчанию.

В следующем примере в классе Vectorобъявлены два конструктора: один с двумя параметрами, второй из которых имеетзначение по умолчанию, и один без параметров, инициализирующий единичный векторвдоль оси x (x=1, y=0).class Vector{private:double x;double y;public:void show() {cout << "x = " << x << ", y = " << y;}; // тело методаVector();Vector(double, double);};Vector::Vector(){x = 1.;y = 0.;}Vector::Vector(double xx, double yy=0.){x = xx;y = yy;}void main(){Vector v1(1.1, 2.2); // вызывается конструктор с двумя параметрамиVector v2; //вызывается конструктор без параметровv1.show();v2.show();}Примечания.1.

Если не объявлен ни один конструктор, то для построения объекта классаиспользуется неявный конструктор по умолчанию. У него нет параметров, иинициализация данных им не осуществляется.2. Из одного конструктора можно вызвать другой конструктор (например, с другимчислом параметров). При этом второй конструктор создаст временный объект.3.

В данном примере метод show() описан внутри класса. Это эквивалентнодобавлению модификатора inline при стандартном описании метода вне класса.36. Список инициализаторовОбычная инициализация элементов данныхв конструктореVector::Vector(double xx, double yy=0.){x = xx;y = yy;}Инициализация с использованием спискаинициализаторов (после : и до {})Vector::Vector(double xx, double yy=0.) :x(xx), y(yy){}7.

ДеструкторыДеструктор – это специальная функция, которая вызывается автоматически в моментуничтожения объекта. Его основанная задача уничтожить оставшийся «мусор». Например,если конструктор использует оператор new для выделения памяти, то деструктор спомощью оператора delete может ее освободить.За деструктором зарезервировано имя, совпадающее с именем класса, которомупредшествует тильда “~”. Так, деструктор класса Vector имеет имя ~Vector(). Удеструктора отсутствует не только возвращаемое значение, но и какие либо аргументы.Пример. Добавим в публичный раздел класса Vector прототип деструктора~Vector();Для демонстрации того, когда вызывается деструктор, запишем его в виде:Vector::~Vector(){cout << "Bye!\n";}8.

Присвоение объектовОдин объект можно присвоить другому объекту того же типа (класса). Например,void main(){Vector v1(1.1, 2.2);Vector v2;v2 = v1; //все значения элементов данных объекта v1 копируются в объект v2v2.show();}По умолчанию значения каждого элемента исходного объекта копируются в соответствующий элемент целевого объекта.9. Константные (readonly) методыclass Vector{…public:void show();…}…Vector v1;v1.show(); // Okconst Vector v2;v2.show(); // Ошибка, нет уверенности,что метод не изменит константный вектор4class Vector{…public:void show() const; // метод можетиспользовать элементы данных класса только на чтение…}…const Vector v2;v2.show(); // Ok10.

Целочисленные константы с областью видимости - классclass MyClass{const int Len = 10; // Ошибка. Неверный оператор присваивания внутри класса…}Два варианта:class MyClass{enum {Len = 10};char c[Len];…}class MyClass{static const int Len = 10;char c[Len];…}11. Указатель thisЭто зарезервированный указатель на текущий объект (для которого вызван метод).Пример. Предположим мы хотим написать метод comp, который сравнивает длинытекущего вектора и вектора, передаваемого ему по ссылке, и выдает ссылку на большийвектор:const Vector & Vector::comp(const Vector & v){if (v.x*v.x + v.y*v.y > x*x + y*y) return v;else return *this;}Использование указателя this позволяет вернуть текущий вектор или ссылку на него(*this).12. Массив объектовVector var[10];var[3].show();Обязательным условием является наличие в классе конструктора по умолчанию (безпараметров).Литература.Стивен Прата.

"Язык программирования Си++. Лекции и упражнения. Учебник: Пер. С англ." - ОООДиаСофтЮП, 2004. Глава 10.5Упражнение С3_1.1. Создайте класс Vector, описанного выше вида, для хранения и обработки двумерных векторов. Задайтеконструкторы и деструктор класса. Предусмотрите конструктор с двумя параметрами (декартовыкоординаты вектора x и у), с одним параметром (вектор вдоль оси x) и без параметров (единичный векторвдоль оси x). Предусмотрите описанные в примерах методы set и show.2. Добавьте в конструктор вывод на экран информационного сообщения «Создан объект», а в деструктор –«Удален объект».3. Напишите метод, который «растягивает» вектор в произвольное число раз, метод, возвращающий модульвектора, и метод, который создает новый вектор, равный сумме двух векторов.4. В основной функции создайте два объекта класса Vector с координатами, задаваемыми пользователем склавиатуры, второй - со значениями координат по умолчанию.

С помощью метода show() выведитекоординаты обоих векторов на экран.5. Поменяйте значения координат двух векторов. С помощью метода show() выведите координаты обоихвекторов на экран.6. Растяните один из векторов в три раза и с помощью метода show() выведите координаты растянутоговектора.7. Сложите два вектора и выведите на экран координаты суммарного вектора.Упражнение С3_2.1. Создайте класс MyTime для хранения и обработки времени, заданного часами и минутами (принимаютзначения от 0 до 59). Создайте конструктор класса.

Предусмотрите возможность создания объекта спередачей конструктору 1) часов и минут, 2) только минут (без ограничения 59) и 3) по умолчанию.Предусмотрите метод set для установки значений часов и минут в объекте, метод show для выдачихранимого объектом времени на экран и метод sum для добавления к объекту времени другого объекта.2. Создайте два объекта класса MyTime и продемонстрируйте возможности ваших методов.Упражнение С3_3.1.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
428
Средний доход
с одного платного файла
Обучение Подробнее