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

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

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

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

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

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

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

Например, следующаяинструкция вполне допустима:const int &ref = 10;В ссылках такого типа выгода невелика, но иногда их можно встретить впрограммах.Упражненияения]1. Попытайтесь найти полезное применение для независимой ссылки.Глава 4. Массивы, указатели и ссылкиLПроверка усвоенияматериала главыТеперь вам необходимо выполнить следующие упражнения и ответить навопросы:1. Ниже представлен класс a_type. Создайте двумерный, два на пять, массиви дайте каждому элементу массива начальное значение по своему выбору.Затем выведите содержимое массива на экран.class a_type {double a, b;public:a_type(double x, double y) {a = x;b = y;}void show() { cout « a « ' ' « b « "\n"; });2.

Модифицируйте решение предыдущей задачи так, чтобы доступ к массиву осуществлялся через указатель.3. Что такое указатель this?4. Покажите основные формы операторов new и delete. Какие преимуществаони дают в сравнении с функциями malloc() и free()?5. Что такое ссылка? Какое можно получить преимущество от использованияссылки в качестве параметра?6.

Создайте функцию recipQ, которая получает один параметр-ссылку на значение типа double. Эта функция должна изменить значение своего параметра на обратное. Напишите программу вывода на экран результатовработы функции.Проверка усвоенияматериала в целомВ этом разделе проверяется, хорошо ли вы усвоили материал этой и предыдущих глав.1. Пусть дан указатель на объект. Какой оператор использовать для доступак члену объекта?2. В главе 2 была создана программа с классом strtype, в которой памятьдля строки выделялась динамически. Переделайте программу (показанную здесь для удобства) так, чтобы в ней использовались операторы newи delete.142_СамоучительC++#include <iostream>^include <cstring>linclude <cstdlib>using namespace std;class strtype {char *p;int len;public:strtype (char *ptr) ;-strtype {) ;void showf) ;);strtype: : strtype (char *ptr){len = strlen(ptr)p=(char *} malloc (len+1) ;if(ip) {cout « "Ошибка выделения памяти \п";exit{l) ;strcpy(p, ptr) ;strtype : : -strtype ( ){cout « "Освобождение памяти по адресу р\п";free (p) ;}void strtype: : show (){cout « p « " — длина: " « len;cout « "\n";}int main { )(strtype si {"Это проверка") , з2("Мне нравится C++");si .show () ;s2 .

show ( ) ;return 0;3. Переделайте любую программу из предьщущей главы так, чтобы в нейиспользовались ссылки.Глава 5Перегрузка функцийВ этой главе вы более подробно изучите перегрузку функций. Хотя с этойтемой вы уже встречались, имеется несколько дополнительных аспектов, скоторыми необходимо познакомиться. Здесь вы найдете ответы на следующие вопросы: как перегрузить конструктор, как создать конструктор копий,как функции передать аргументы по умолчанию, как можно избежать неоднозначности при перегрузке функций.Повторение пройденногоПеред тем как продолжить, необходимо правильно ответить на следующиевопросы и сделать упражнения.1.

Что такое ссылка? Приведите две важных области применения ссылок?2. Покажите, как с помощью оператора new выделить память для значенийтипа float и int. Покажите также, как освободить память с помощью оператора delete.3. Какова основная форма оператора new, используемая для инициализациидинамических переменных? Приведите конкретный пример.4. Дан следующий класс.

Как инициализировать массив из десяти элементов так, чтобы переменная х получила значения от 1 до 10 включительно.Class samp (int x;public:sump(int i) { x = n; }int getx () [ return x; }5. Перечислите достоинства и недостатки параметров-ссылок.6. Может ли быть инициализирован массив, память для которого выделяется динамически?144Самоучитель C++7.

На основе следующего прототипа создайте функцию mag(), повышающую порядок значения переменной mim до того уровня, который заданпеременной order:void mag(long Snum, long order);Например, если переменная num равна 4, а переменная order равна 2, топосле выполнения функции mag() переменная num должна стать равной400. Напишите демонстрационную программу, показывающую, чтофункция работает.5.1. Перегрузка конструкторовВ программах на C++ перегрузка конструктора класса вполне обычна.(Деструктор, однако, перегружать нельзя.) Имеется три основных причиныперегрузки конструктора, которая, как правило, выполняется либо дляобеспечения гибкости, либо для поддержки массивов, либо для созданияконструкторов копий. В этом разделе рассказывается об обеспечении гибкости и поддержке массивов, а о конструкторах копий — в следующем.Перед изучением примеров необходимо запомнить одну вещь: каждому способу объявления объекта класса должна соответствовать своя версия конструктора класса.

Если эта задача не решена, то при компиляции программыобнаружится ошибка. Именно поэтому перегрузка конструктора стольобычна для программ C++.Гу_.имеры•Вероятно, наиболее частое использование перегрузки конструктора — этообеспечение возможности выбора способа инициализации объекта.

Например, в следующей программе объекту ol дается начальное значение, а объекту о2 — нет. Если вы удалите конструктор с пустым списком аргументов,программа не будет компилироваться, поскольку у неинициализируемогообъекта типа samp не будет конструктора. И наоборот, если вы удалите конструктор с параметром, программа не будет компилироваться, поскольку небудет конструктора у инициализируемого объекта типа samp. Для правильнойкомпиляции программы необходимы оба конструктора.^include <iostream>using namespace std;class myclass {int x;public:// перегрузка конструктора двумя способамиmyclass{} { x = 0; J // нет инициализацииГлава 5.

Перегрузка функций745myclass(int n) { x = n; } // инициализацияint g e t x ( ) { return x; }};intmain()myclass ol(10); // объявление с начальным значениемmyclass o2; // объявление без начального значенияcout « "ol: " « ol.getxO « '\п';cout « "о2: " « o2,getx() « '\п';return 0;2. Другой традиционный довод в пользу перегрузки конструктора состоит втом, что такая перегрузка позволяет сосуществовать в программе как отдельным объектам, так и массивам объектов. Как вы, наверное, знаете по своемуопыту программирования, вполне обычно инициализировать отдельную переменную, тогда как инициализация массива встречается достаточно редко.(Гораздо чаще элементам массива присваиваются их значения в зависимостиот информации, получаемой уже при выполнении программы.) Таким образом, для сосуществования в программе неинициализированных массивовобъектов наряду с инициализированными объектами вы должны использовать конструктор, который поддерживает инициализацию, и конструктор,который ее не поддерживает.Например, для класса myclass из примера 1 оба этих объявления правильны:myclass ob{10);myclass ob[5];Обеспечив наличие обоих конструкторов (с параметрами и без параметров),вы в своей программе получаете возможность создавать объекты, которыепри необходимости можно либо инициализировать, либо нет.Естественно, что после определения конструктора с параметрами и конструктора без параметров, их можно использовать для создания инициализированных или неинициализированных массивов.

Например, в следующейпрограмме объявляются два массива типа myclass; при этом один из нихинициализируется, а другой нет:^include <iostream>using namespace std;class myclass {int x;public:// перегрузка конструктора двумя способамиmyclass!) { x = 0; } // нет инициализации146_СамоучительC++myclass(int n) { x = n; } // инициализацияint getx() { return x; }int main (){myclass ol[10]; // объявление массива без инициализации// объявление с инициализациейmyclass o2[10] = {1,2,3,4,5,6,7,8,9,10};int i;for(i=0; i<10; i++} {cout « "ol[ " « i « "]:" « ol [i] .

getx ( ) ;cout « ' \n' ;cout « "o2 [ " « i « "]:" « o2 [i] . getx ( ) ;cout « '\n' ;return 0;В этом примере все элементы массива ol конструктор устанавливает в нуль.Элементы массива о2 инициализируются так, как показано в программе.3. Другой довод в пользу перегрузки конструкторов состоит в том, что такаяперегрузка позволяет программисту выбрать наиболее подходящий методинициализации объекта. Чтобы понять, как это делается, рассмотрим следующий пример, в котором создается класс для хранения календарной даты.Конструктор datcQ перегружается двумя способами.

В первом случае данныезадаются в виде строки символов, в другом — в виде трех целых.^include <iostream>#include <cstdio> // заголовок для функции sscanfOusing namespace std;class date {int day, month, year;public:date (char *str) ;date (int m, int d, int y) {day = d;month = m;year = y,}void show() {cout « month « ' / ' « day « ' / ' ;Глава 5.

Перегрузка функций14_7_cout « year « ' \ n ' ;)};date::date{char *str){sscanf(str, "%d%*c%d%*c%d", smonth, £day, Syear);}int main (}{// использование конструктора для даты в виде строкиdate sdate("ll/l/92");// использование конструктора для даты в виде трех целыхdate idatefll, I, 92) ;sdate.showO ;idate.show();return 0;}Преимущество перегрузки конструктора date(), как показано в программе, втом, что вы можете выбрать ту версию инициализации, которая лучше всегоподходит к текущей ситуации. Например, если объект типа date создается в результате пользовательского ввода, то проще использовать строковую версию.Однако если объект типа date строится путем каких-то простых внутреннихрасчетов, то версия с тремя целыми параметрами становится, вероятно, болеепривлекательной.Хотя конструктор можно перегружать любое количество раз, лучше этим незлоупотреблять.

С точки зрения стилистики, конструктор имеет смысл перегружать только тогда, когда такая перегрузка позволяет адаптировать программу к часто встречающимся ситуациям. Например, еще одна перегрузкаконструктора date() для ввода трех восьмеричных целых вряд ли будет иметькакой-то смысл. Однако перегрузка конструктора date() для доступа к объекту типа time_t (тип данных для хранения системных даты и времени) моглабы оказаться весьма полезной.

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