Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Г. Шилтд - Самоучитель C++ (PDF)

Г. Шилтд - Самоучитель C++ (PDF), страница 84

PDF-файл Г. Шилтд - Самоучитель C++ (PDF), страница 84 Практика расчётов на ПЭВМ (37366): Книга - 3 семестрГ. Шилтд - Самоучитель C++ (PDF): Практика расчётов на ПЭВМ - PDF, страница 84 (37366) - СтудИзба2019-05-08СтудИзба

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

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

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

Текст 84 страницы из PDF

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

Если указатель базового классауказывает на объект производного класса, содержащего виртуальную функцию, то выбор конкретной версии вызываемой функции определяется типомобъекта, на который он указывает.4. Чистая виртуальная функция — это функция, у которой нет определения вбазовом классе.5.

Абстрактный класс — это базовый класс, в котором содержится по крайнеймере, одна чистая виртуальная функция. Полиморфный класс — это класс, вкотором содержится, по крайней мере, одна виртуальная функция.6. Этот фрагмент неправилен, поскольку переопределение виртуальной функции должно обеспечивать тот же тип возвращаемого значения, тот же типПриложение В. Ответы на вопросы и решения упражнений621параметров и то же их количество, что и исходная функция. В данном случае, переопределенная функция f() отличается числом своих параметров.7. Да.Проверка усвоения материала в целом1.

// Демонстрация возможностей виртуальных функций^include <iostream>#include <cstdlib>using namespace std;class list (public:list *head;list *tail;list *next;int num;// указатель на начало списка// указатель на конец списка// указатель на следующий элемент списка// число для храненияlist () ( head = tail = next = NULL; }virtual void store(int i) = 0;virtual int retrieved = 0;// Создание списка типа очередьclass queue: public list (public:void store(int i) ;int retrieve d;queue operator+(int i) { store (i); return *this; }int operator —(int unused) { return retrieved; }}•void queue::store(int i)list *item;item = new queue;if (!item) {cout « "Ошибка выделения памяти\п";exit(l);item -> num = i;// Добавление элемента в конец спискаif(tail) tail -> next = item;tail = item;item -> next = NULL;if('head) head = tail;622___Самоучительint queue : : retrieve ( ){int i ;list *p;if (! head) {cout « "Список луст\п";return 0;// Удаление элемента иэ начала спискаi = head -> num;р = head;head = head -> next;delete p;return i;// Создание списка типа стекclass stack: public list {public:void store{int i) ;int retrieve ( ) ;stack operator^- (int i) { store(i); return *this; }int operator — {int unused) { return retrieved; }void stack: :store (int i){list *item;item = new stack;if (! item) {cout « "Ошибка выделения памяти\п";exit (1) ;}item -> num = i;// Добавление элемента в начало спискаif (head) item -> next = head;head = item;iff! tail) tail - head;int stack: : retrieve (}{int i;list *p;C++Приложение В.

Ответы на вопросы и решения упражнений623if (!head) {cout « "Список пуст\п";return 0;// Удаление элемента из начала спискаi = head -> num;р = head;head = head -> next;delete p;return i;int main(){// Демонстрация очередиqueue q_ob;q__ob + 1;q_ob + 2;q_ob + 3;coutcoutcoutcout« "Очередь : " ;« q_ob — ;« q_ob — ;« q_ob — ;cout « r\n' ;// Демонстрация стекаstack s_ob;s_ob + 1;s_ob + 2;s_ob 4 3;coutcoutcoutcout««««"Стек: ";s_ob — ;s_ob — ;s_ob — ;cout « '\n' ;return 0;12.

Отличие виртуальных функций от перегружаемых в том, что перегружаемыефункции должны отличаться либо числом, либо типом своих параметров.Подменяемая виртуальная функция должна иметь точно такой же прототип(поэтому такой же тип возвращаемого значения, такой же тип параметров ито же их число), как и исходная функция.624Самоучитель C++ГЛАВА 11Повторение пройденного1. Виртуальная функция — это функция, которая в базовом классе объявляетсяс ключевым словом virtual и затем в производном классе подменяется другойфункцией.2. Чистая виртуальная функция — это функция, которая в базовом классе неимеет определения функции.

Это означает, что функция обязательно должнаподменяться соответствующей ей функцией в производном классе..Базовыйкласс, который содержит, по крайней мере, одну чистую виртуальную функцию, называется абстрактным.3. Динамический полиморфизм достигается посредством использования виртуальных функций и указателей базового класса.4. Если в производном классе отсутствует подмена не чистой виртуальнойфункции, то производный класс будет использовать версию виртуальнойфункции из базового класса.5. Главным преимуществом динамического полиморфизма является гибкость.Главным его недостатком является некоторое снижение быстродействия.Упражнения11.12.

tinclude <iostream>using namespace std;template <class X> X min(X a, X b){if(a<=b) return a;else return b;}int main(){cout « min(12.2, 2.0);cout « endl;cout « min(3, 4);cout « endl;cout « min('c', 'a');return 0;ПриложениеВ.Ответынавопросыирешенияупражнений_6253.

# include <iostreara>^include <cstring>using namespace std;template <class X> int find(X object, X *list, int size){int i;for(i=0; i<size; iif (object == listfi]} return i;return -i;int main{)int a[]=U, 2, 3, 4};char *с="это проверка";double d[]-{l.l, 2.2, 3.3};cout « find(3, a, 4);cout « endl;cout « find('a', c, (int) strlen(c));cout « endl;cout « find(0.0, d, 3);return 0;4. Ценность родовых функций в том, что они позволяют определить общийалгоритм, который можно применить к разным типам данных. (Следовательно, не нужно явно задавать конкретные версии алгоритма.) Кромеэтого, родовые функции помогают реализовать основную идею программирования на C++, а именно "один интерфейс — множество методов".11.22.

// Создание родовой очереди^include <iostream>using namespace std;tfdefine SIZE 100template <class Qtype> class q_type (Qtype queue[SIZE]; // содержит очередьint head, tail;// индекс вершины и хвоста очередиpublic:q_type() { head = tail =0; }void q(Qtype num); // помещает объект в очередь626Самоучитель C++Qtype deq{};// извлекает объект из очереди};// Размещение значения в очередьtemplate <class Qtype> void q_type<Qtype>::q(Qtype num){if (tail+l==head || (tail+l==SIZE && Ihead)) {cout « "Очередь полна\п";return;}tail-H-;if {tail==SIZE) tail = 0; // замыкание циклаqueue[tail] = num;}// Удаление значения из очередиtemplate <class Qtype> Qtype q_type<Qtype>::deq (){if {head == tail) {cout « "Очередь пуста";return 0; // очередь пуста или какая-то иная ошибка}head++;if(head==SIZE) head = 0;return queue[head];// замыкание цикла}int main{){q_type<int> ql;q_type<char> q2;int i;for(i=l; iql.q(i);for(i=l; icout « "Первая очередь " « ql.deqO « "\ncout « "Вторая очередь " « q2.deq() « "\n}return 0;3.

^include <iostream>using namespace std;ПриложениеВ.Ответынавопросыирешенияупражнений_627template <class X> class input {X data;public:input (char *s, X man, X m a x ) ;template <class X>input <X> :: input (char *s, X min, X max){do {cout « s « "; ";cin » data;} while (data<min [| data>max) ;}int main{){input<int> 1("ввод целых", О, 10);input<char> с("ввод символов", 'A', 'Z'};return 0;11.32.

Инструкция throw вызывается еще до того, как управление передано в блок try.3. Вызывается символьная исключительная ситуация, а инструкция catch предназначена только для обработки исключительной ситуации типа указатель насимвол. (То есть для обработки символьной исключительной ситуации нетсоответствующей инструкции catch.)4. Если возбуждается исключительная ситуация, для которой не задано соответствующей инструкции catch, то вызывается функция terminate(), что может привести к аварийному завершению программы.11.42. Для инструкции throw нет соответствующей инструкции catch.3. Одним из способов решить проблему является создание обработчикаcatcb(int).

Другой способ — это перехватывать все исключительные ситуациис помощью обработчика catch(...).4. Все типы исключительных ситуаций перехватываются инструкцией catch(,..).5. ^include <iostream>^include <cstdlib>using namespace std;628double divide (double a, double b){try {if(!b) throw (b);}catch (double) {cout « "На ноль делить нельзя\п";exitU);}return a/b;int mainOcout « divide(10.0, 2.5) « endl;cout « divide(10.0, 0.0);return 0;11.51. По умолчанию оператор new возбуждает исключительную ситуацию при появлении ошибки выделения памяти. Оператор new(nothrow) при невозможности выделить память возвращает нулевой указатель.2.

р = new(nothrow) (int);if(!p) (cout « "Ошибка выделения памяти\п";try {р = new int;} catch (bad alloc ba} {™—cout « "Ошибка выделения памяти\п";Проверка усвоения материала главы 1 11. ^include <iostream>^include <cstring>using namespace std;// Родовая функция для поиска// наиболее часто встречающегося значенияtemplate <class X> X mode(X *data, int size)Приложение В. Ответы на вопросы и решения упражненийregister int t, w;X md, oldmd;int count, oldcount;oldmd = 0;oldcount = 0;for(t=0; t<size; t++) {md=data [ t ] ;count = 1;for(w = t+1; w < size; w+-l-)if (md==data [w] ) count++if {count > oldcount) {oldmd = md;oldcount = count;return oldmd;int main (){int i[] = {1, 2, 3, 4, 2, 3, 2, 2, 1, 5};char *p = "Это проверка";cout « "Значение для массива целых: " « rnode(i, 10) « endlcout « "Значение для массива символов: " « mode (p, (int)strlen (p) ) ;return 0;2.

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