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

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

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

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

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

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

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

^include <iostream>using namespace std;template <class X> X sum(X *data, int size)Iint i;X result = 0;for{i=0; i<size; i++) result += data[i];return result;1int main ( )int i[] - {1, 2, 3, 4};double d[] = {1.1, 2.2, 3.3, 4.4};629630___Самоучительcout « surn{i, 4) « endl;cout « sum(d, 4) « endl;return 0;3. ^include <iostream>using namespace std;// Родовой класс для пузырьковой сортировкиtemplate <class X> void bubble (X *data, int size){register int a, b;X t;for{a=l; a<size;for (b=size-l; b>=a; b — )if(data[b-l] > data[b])t = data[b-l] ;data[b-l] = data[b]data[b] = t;int main{)int i[] = {3, 2, 5, 6, 1, 8, 9, 3, 6, 9);double d[] = {1.2, 5.5, 2.2, 3.3};int j ;bubble{i, 10);bubble (d, 4);// сортировка данных типа int// сортировка данных типа doublefor(j=0; j<10; j++) cout « i[j] «cout « endl;for(j=0; j<4; j++) cout « d[j] « 'cout « endl;return 0;4.

// Здесь показан родовой стек для хранения пар значений^include <iostream>using namespace std;ttdefine SIZE 10// Создание родового класса для стекаtemplate <class StackType> class stack {.C++ПриложениеВ.ОтветынавопросыирешенияупражненийStackType stckfSIZE] [2] ; // содержит стекint tos;// индекс вершины стекаpublic :void init() { tos =0;}void push (StackType ob, StackType ob2) ;StackType pop (StackType &ob2);I;// Размещение объектов в стекеtemplate <class StackType>void stack<StackType>: : push (StackType ob, StackType ob2)Iif (tos==SIZE) (cout « "Стек полон\п";return;>stck[tos] [0] = ob;stck[tos] [1] = ob2;tos++;// Выталкивание объектов из стекаtemplate <class StackType>StackType stack<StackType>: : pop (StackType &ob2)(if (tos— 0) (Icout « "Стек пуст\п";return 0; // возврат нуля при пустом стекеtos — ;ob2 = stck[tos] [1];return stck[tosj [0] ;}int main (){// Демонстрация символьных стековstack<char> si, s2; // создание двух стековint i ;char ch;// Инициализация стековsl.initO ;s2.init() ;s 1 .

push ( ' a ' , ' b ' ) ;r r rs2.push('x , z ) ;sl.pusht'b', 'd') ;_63?632______Самоучительs2.push( ' у ' , ' е ' ) ;s l . p u s h { ' c ' , 'a' ) ;s2.push('z', ' x ' ) ;for(i=0; i<3; i++) fcout « "Из стека 1:" « sl.pop(ch);cout « ' ' « ch « "\n";}for{i=0; i<3; i-n-J {cout « "Из стека 2:" « s2.pop(ch);cout « ' ' « ch « "\n";}// Демонстрация стеков со значениями типа doublestack<double> dsl, ds2; // создание двух стековdouble d;// Инициализация стековdsl.init () ;ds2.init() ;dsl.pushfl.l,ds2.push{2.2,dsl.push(3.3,ds2.push(4.4,dsl.

push (5. 5,ds2.push(6.6,2.0);3.0);4.0);5.0);6.0) ;7.0);for(i=0; i<3cout « "Из стека 1:" « dsl. pop (d);cout « ' ' « d « "\n";for(i=0;cout « "Из стека 2:" « ds2.pop(d);cout « ' ' « d « "\n";return 0;}5. Ниже представлены обычные формы инструкций try, catch и throw:try {// блок trythrow искл_ситуацияcatch (type arg) {// .C++ПриложениеВ.Ответынавопросыирешенияупражнений_6336. /* В этой программе показан родовой класс stack, в который встроенаобработка исключительных ситуаций*/ttinclude <iostream>using namespace std;^define SIZE 10// Создание родового класса stacktemplate <class StackType> class stack (StackType stck[SIZE]; // содержит стекint tos;// индекс вершины стекаpublic:void init() { tos = 0;} // инициализация стекаvoid push (StackType ch) ; // помещает объект в стекStackType pop О; // выталкивает объект из стека// Размещение объекта в стекеtemplate <class StackType>void stack<StackType>: :push(StackType ob){try {if (tos=SIZE) throw SIZE;}catch (int) {cout « "Стек полон\п";return;}stck[tos] = ob;tos++;// Выталкивание объекта из стекаtemplate <class StackType>StackType stack<StackType>: :pop(){try {if (tos==0) throw 0;icatch (int) {cout « "Стек пуст\п";return 0; // возврат нуля при пустом стеке)tos — ;return stckftos];634Самоучитель С++intmain(){// Демонстрация символьных стековstack<char> si, s2; // создание двух стековint i;// Инициализация стековsl.initO ;s2.init()jsi.push('a')s2.push('x'Jsl.pushCb1 )s2.push('y')si.push('c1)s2.push{'z')for(i=0; i<3for{i=0; i<4i++) cout « "Из стека 1:" « sl.popO « "\n";cout « "Из стека 2:" « s2.pop(J « "\n";// Демонстрация стеков со значениями типа doublestack<double> dsl, ds2; // создание двух стеков// Инициализация стековdsl.initO ;ds2.init () ;dsl.push(1.1);ds2.push(2.2);dsl.push(3.3);ds2.push(4.4);dsl.push(5.5};ds2.push(6.6);for(i=0; i<3; i++) cout « "Из стека 1:" « dsl.pop(J « "\nfor(i=0; i<4; i++) cout « "Из стека 2:" « ds2.pop() « "\nreturn 0;8.

Если при ошибке выделения памяти оператор new возбуждает исключительную ситуацию, вы можете быть уверены, что эта ошибка будет обработанатем или иным способом (даже путем аварийного завершения программы). Инаоборот, если при ошибке выделения памяти оператор new возвращает нулевой указатель, а вы забыли организовать контроль этого возвращаемогозначения, то такая ошибка может остаться незамеченной и в конечном итогепри попытке использования нулевого указателя привести к краху программы,причем будет чрезвычайно трудно обнаружить причину этого.ПриложениеВ.Ответы'на'вопросыирешенияупражнений_635ГЛАВА 12Повторение пройденного1. В C++ родовая функция определяет общий набор операций для данных разных типов.

Она реализуется с помощью ключевого слова template. Нижепредставлена основная форма родовой функции:template <classTtype> возвр_значвнив имя_фуихцкх(сп_параметров)2. В C++ родовой класс определяет все операции класса, но действительныеданные задаются в качестве параметра при создании объекта этого класса.Ниже представлена основная форма родового класса:template <class Ttype> class имя_класса3.

^include <iostream>using namespace std;// Возвращает значение а в степени btemplate <class X> X gexp{X a, X b){X i, result = 1;for(i=0; i<b; i++) result *= a;return result;}int main(){cout « gexp(2, 3) « endl;cout « g e x p U O . O , 2 .

0 ) ;return 0;4. ttinclude <iostreara>ttinclude <fstream>using namespace std;Самоучитель C++636template <class CoordType> class coord (CoordType x, y;public:coord(CoordType i, CoordType j ) { x = i; у = j; }void show() { cout « x « ", " « у « endl; }int main(){coord<int> •old, 2), o2{3, 4);ol.show() ;o2.show(};coord<double> o3{0.0, 0.23), o4(10.19, 3.098);o3.show();o4.show();return 0;15. Совместная работа инструкций try, catch и throw происходит следующим образом. Поместите все инструкции, для которых вы хотите обеспечить контроль исключительных ситуаций, внутри блока try. При возникновении исключительной ситуации она возбуждается с помощью инструкции throw и затем обрабатывается с помощью соответствующей инструкции catch.6.

Нет.7. Вызов функции terminate() происходит в том случае, если исключительнаяситуация возбуждается той инструкцией throw, для которой нет соответствующей инструкции catch. Вызов функции unexpected() происходит в томслучае, если исключительная ситуация не указана в списке типов инструкции throw.8. catch(...)Упражнения12.11. Динамическая идентификация типа необходима потому, что в C++ при компиляции программы не всегда есть возмозможность выяснить, на объект какого типа указывает указатель базового класса или ссылается ссылка базового класса.2.

Если класс BaseClass перестает быть полиморфным классом, на экране мыувидим следующее:Приложение В. Ответы на вопросы и решения упражнений637Тип переменной i — это intУказатель р указывает на объект типа BaseClassУказатель р указывает на объект типа BaseClassУказатель р указывает на объект типа BaseClass3. Да.4. if(typeid{*p) == typeid(D2)) ...5. Истинным.

Несмотря на то, что здесь используется один и тот же классшаблон, тип данных в каждой из версий различен.12.21. Оператор dynamic_cast позволяет проверить правильность выполнения операции приведения полиморфных типов.2. ^include <iostreara>#include <typeinfo>using namespace std;class В {virtual void f() {}};class Dl: public В (void f() {}>;class D2: public В {void f(J {}};int main { )(В *р;D2 Ob;p = dynamic_cast<D2 *> (sob);if{p) cout « "Приведение типов прошло успешно";else cout « "Приведение типов не произошло";return 0;3. int main О{int i ; ;Shape *p;638Самоучитель С+->-for(i=0; ip = generator!); // получение следующего объектаcout « typeid(*p) .name ( ) « endl;// объект изображается на экране только в том случае,// если это не объект типа NullShapeif {!dynamic_cast<Null3hape *> (p) )p->example () ;jreturn 0;4.

Нет. Указатели Вр и Dp указывают на объекты совершенно разных типов,12.31, Новые операторы приведения типов обеспечивают более безопасные и понятные способы выполнения операции приведения типов.2. ^include <iostream>using namespace std;void f (const double Si){double sv = const_cast<double s> (i) ;v = 100.0;}int main(){double x - 98.6;cout « x « endl;fix);cout « x « endl;return 0;3. Поскольку оператор const_cast лишает объекты атрибута const, его использование может привести к неожиданной и нежелательной модификацииобъектов.Приложение В. Ответы на вопросы и решения упражнений639Проверка усвоения материала главы 121.

Оператор typeid возвращает ссылку на объект класса type_Jnfo, содержащегоинформацию о типе,2. Для использования оператора typeid в программу необходимо включить заголовок <typeinfo>.3. Ниже представлены новые операторы приведения типов.ОператорНазначениеdynamic_castВыполняет операцию приведения полиморфных типовreinterpret_castПреобразует указатель на один тип в указатель на другой типstatic_castВыполняет операцию "обычного" приведения типовconst_castЛишает объекты атрибута const4.

#include <iostream># include <typeinfo>using namespace std;class A {virtual void f{){}1;class B: public A {1;class C: public В {int main ( ){A *p, a__ob;В b_ob;С c_ob;int i;cout « "Введите О для объектов типа А, "cout « "1 для объектов типа В или";cout « "2 для объектов типа С.\п";cin » i;if (i==l) p = fib_ob;else if(i==2) p = ic_ob;else p = &a_ob;Самоучитель C++640if(typeid(*p) == typeid(A)cout « "Объект А";if (typeidt*p) == typeid(B}cout « "Объект В";if(typeid(*p) == typeid(C)cout « "Объект С";return 0;5.

Оператор typeid можно заменить оператором dynamic_cast в ситуациях, когдаоператор typeid используется для проверки правильности выполнения операции приведения полиморфных типов.6. Оператор typeid возвращает ссылку на объект типа type_info.Проверка усвоения материала в целом1. Здесь представлена версия функции genera tor(), в которой для контроля завыделением памяти используется механизм обработки исключительныхситуаций./* Использование механизма обработки исключительных ситуаций дляотслеживания ошибок выделения памятиVShape *generator()try {switch{rand{) % 4)case 0:return newcase 1:return newcase 2:return newcase 3:return new{Line;Rectangle;Triangle;NullShape;catch (bad_alloc ba) {return NULL;}return NULL;2. Ниже представлена версия функции generator(), в которой используется оператор new(nothrow).Приложение В.

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