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

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

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

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

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

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

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

Создайте класс line, который рисует на экране линию. Храните длинулинии в виде закрытой целой переменной len. Конструктор line должениметь один параметр — длину линии. Он должен сохранять длину линиии собственно рисовать линию. Если ваша система не поддерживает графику, отобразите линию, используя символ *. Необязательное задание:Для удаления линии используйте деструктор line.3. Что выведет на экран следующая программа?^include <iostream>using namespace std;int{main()int i = 10;long 1 = 1000000;double d = -0.0009;Глава 2. Введение в классыcout « i « ' ' « 1 « ' ' « d;cout « " \ n " ;return 0;I4.

Добавьте производный класс, который наследует класс агеа_с! из раздела2.3, упражнение 1. Назовите этот класс cylinder и пусть он вычисляетплощадь поверхности цилиндра. Эта площадь задается так: 2 * pi * R2 +pi * D * Н.5. Что такое встраиваемая функция? В чем ее преимущества и недостатки?6. Измените следующую программу так, чтобы все функции-члены поумолчанию стали встраиваемыми функциями:#include <iostream>using namespace std;class myclass {int i, j;public:myclass (int x, int y) ;void show() ;};myclass: :myclass (int x, int y)fi = x;j = Y;}void myclass :: show (}{cout « i « "" "" « j « "\n";}int main(){myclass count (2, 3);count . show ( ) ;return 0;}7.

В чем отличие между классом и структурой?8. Правилен ли следующий фрагмент?union {float f;unsigned int bits;1;воСамоучитель C++Проверка усвоенияматериала в целомВ этом разделе проверяется, хорошо ли вы усвоили материал этой и предыдущих глав.1. Создайте класс prompt. Для вывода на экран строки-приглашения включите в класс конструктор. Помимо строки-приглашения конструктордолжен выполнить ввод набранного вами целого. Сохраните это значениев'закрытой переменной count.

При удалении объекта типа prompt долженбыть подан звуковой сигнал, причем столько раз, сколько задано пользователем в переменной count.2. В главе 1 вы создали программу для преобразования футов в дюймы. Теперь для этой цели создайте класс. Класс должен хранить число футов иего эквивалент в дюймах. Передайте конструктору класса число футов ипри этом он должен вывести на экран число дюймов.3. Создайте класс dice, который содержит закрытую целую переменную.Создайте функцию го11(), использующую стандартный генератор случайных чисел randQ, для получения чисел от 1 до 6.

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

Вы такжеузнаете о новом важном типе функций: дружественных (friend) функциях.Повторение пройденногоПеред тем как продолжить, вы должны правильно ответить на следующиевопросы и сделать упражнения.1. Пусть дан следующий класс, каковы имена его конструктора и деструктора?class widgit {int x, у;public:// ... впишите конструкторы и деструкторы};2. Когда вызывается конструктор? Когда вызывается деструктор?3. Пусть дан следующий базовый класс, покажите, как он может наследоваться производным классом Mars.class planet {int moons;double dist_from_sun;double diameter;double mass;public:// ...1;4. Имеются два способа сделать функцию встраиваемой.

Что это за способы?5. Приведите, по крайней мере, два ограничения на использование встраиваемых функций.82Самоучитель C++6. Пусть дан следующий класс, покажите, каким образом объявить объект ob,чтобы значение 100 передать переменной а, а значение X переменной с.class sample {int a;char с;public:sample(int x, char ch) { a - x; с = ch; }3.1. Присваивание объектовЕсли тип двух объектов одинаков, то один объект можно присвоить другому.По умолчанию, когда один объект присваивается другому, делается поразрядная копия всех данных-членов копируемого объекта. Например, когдаобъект ol присваивается объекту о2, то содержимое всех данных объекта olкопируется в соответствующие члены объекта о2.

Это иллюстрируется следующей программой:// Пример присваивания объекта#include <iostream>using namespace std;class myclass {int a, b;public:void set (int i, int j) { a ~ i; b = j; }void show{) { cout « a « ' ' « b « "\n"; }int main ( )<myclass ol, o2;ol.set(10, 4);// ol присваивается о2o2 = ol;ol.show( ) ;o2 . show ( ) ;return 0;В этом примере переменным а и b объекта ol присваиваются соответственно значения 10 и 4.

Далее объект ol присваивается объекту о2. Это приво-Глава 3. Подробное изучение классов83_дит к тому, что текущее значение переменной ol.a присваивается переменной о2.а, а текущее значение переменной ol.b — o2.b. Таким образом, впроцессе выполнения программа выведет на экран следующее:10 410 4Запомните, что присваивание двух объектов просто делает одинаковымиданные этих объектов.

Два объекта остаются по-прежнему совершенно независимыми. Например, после выполнения присваивания вызов функциичлена ol.setQ для задания значения ol.a не влияет ни на объект о2, ни назначение его переменной а.Важно понимать, что в инструкции присваивания можно использовать только объекты одинакового типа. Если тип объектов разный, то при компиляции появится сообщение об ошибке. Более того, важно не только чтобытипы объектов были физически одинаковыми, а чтобы одинаковыми былитакже имена типов. Например, следующая программа неправильна:// Эта программа содержит ошибку#include <iostream>using namespace std;class myclass fint a, b;public:void set(int i , int j ) { a = i ; b = j ; }void show() { cout « a « ' ' « b « "\n"; }/* Этот класс похож на класс myclass, но из-за другого имени классадля компилятора он считается другим типом.*/class yourclass Iint a, b;public:void set(int i, int j) { a = i; b = j; }void show() { cout « a « ' ' « b « "\n"; }};int main()rayclass ol;yourclass o2;ol.set(10, 4);_84Самоучитель C++о2 = ol; // ОШИБКА, присваивание объектов разных типовol.show();о2 .

show () ;return 0;}Несмотря на то что классы myclass и yourclass физически одинаковы, онитрактуются компилятором как разные, поскольку имеют разные имена типов.2. Важно понимать, что все данные-члены одного объекта при выполненииприсваивания присваиваются данным-членам другого объекта. Это относитсяи к сложным данным, таким как массивы.

Например, в следующей версииуже знакомого нам класса stack символы реально помещаются только в стекsi, но после выполнения присваивания массив stck объекта s2 также содержит символы a, b и с.ttinclude <iostream>using namespace std;#define SIZE 10// Объявление класса stack для символовclass stack {char s t c k [ S I Z E ] ; // содержит стекint tos; // индекс вершины стекаpublic:s t a c k ( ) ; / / конструкторvoid push(char ch); // помещает в стек символchar p o p ( ) ; // выталкивает символ из стека};// Инициализация стекаstack::stack()(cout « "Работа конструктора стека\л";tos = 0;}// Помещение символа в стекvoid stack::push(char ch){if(tos==SIZE) {cout « "Стек полон \п";return;)stck[tos] = ch;tos+-(-;Глава3.Подробноеизучениеклассов_В5// Выталкивание символа из стекаchar stack: :pop(){if (tos==0) {cout « "Стек пуст \п";return 0; // возврат нуля при пустом стекеtos — ;return s t c k f t o s ] ;int main ()II Образование двух, автоматически инициализируемых стековstack si, s2;int i ;si.

push ( 'a' ) ;si. push ( 'b* ) ;si .push( 'c' ) ;/ / копирование si в s 2s2 = si; // теперь s2 и si идентичныfor(i=0; i<3; i++J cout « "символ из si:" « sl.popi)« "\n";for(i=0; i<3; i++) cout « "символ из s2:" « s2.pop()« "\n";return 0;3. При присваивании одного объекта другому необходимо быть очень внимательным. Например, рассмотрим несколько измененный класс strtype, который мы изучали в главе 2. Попытайтесь найти ошибку в этой программе.// Эта программа содержит ошибку^include <iostream>#include <cstring>^include <cstdlib>using namespace std;class strtype {char *p;int len;public:\strtype(char *ptr);~strtype() ;void s h o w f ) ;86___СамоучительC++strtype: :strtype (char *ptr)(len=strlen(ptr) ;p=(char *} malloc (len+1) ;if(!p) (cout « "Ошибка выделения памяти\п";exit(l) ;}strcpy {p, ptr) ;strtype: :~strtype (}{cout « "Освобождение памяти по адресу р\п";free (p) ;}void strtype: : show (){cout « p « " — длина: " « len;cout « "\n";}int main ()fstrtype з!("Это проверка"), з2("Мне нравится C++")si.

show () ;s2. show () ;// si присваивается s2 — это ведет к ошибкеs2 - si;s 1 . show { ) ;s2 . show ( ) ;return 0;Ошибка в этой программе весьма коварна. Когда создаются объекты si и s2,то для хранения в этих объектах строк выделяется память. Указатель на выделенную каждому объекту память хранится в переменной р. Когда объектstrtype удаляется, эта память освобождается. Однако когда объект si присваивается объекту s2, то указатель р объекта s2 начинает указывать на ту жесамую область памяти, что и указатель р объекта si.

Таким образом, когдаэти объекты удаляются, то память, на которую указывает указатель р объектаsi, освобождается дважды, а память, на которую до присваивания указывалуказатель р объекта s2, не освобождается вообще.Хотя в данном случае эта ошибка и не опасна, в реальных программах сдинамическим распределением памяти она может вызвать крах программы.Как показано в этом примере, при присваивании одного объекта другому выГлава 3. Подробное изучение классов87должны быть уверены в том, что не удаляете нужную информацию, котораяможет понадобиться в дальнейшем.Упражнения1 . Что неправильно в следующем фрагменте?// В этой программе есть ошибка^include <iostream>using namespace std;class ell {int i, j ;public:ell (int a, int b){ i = a; j = b;}class c!2 (int i, j;public:c!2(int a, int b) { i = a; j = b; }int main ( }{Cll x(10, 20} ;c!2 y(0, 0);x = y;2. Используя класс queue, который вы создали в главе 2, раздел 2.1, упражнение1, покажите, как один объект, который мы назвали очередь, можно присвоить другому.3.

Если класс queue из предыдущего вопроса для хранения очереди требует динамического выделения памяти, то почему в такой ситуации одну очередьнельзя присвоить другой?3.2. Передача объектов функциямОбъекты можно передавать функциям в качестве аргументов точно так же,как передаются данные других типов. Просто объявите параметр функции,как имеющий тип класса, и затем используйте объект этого класса в качест-88Самоучитель C++ве аргумента при вызове функции. Как и для данных других типов, поумолчанию объекты передаются в функции по значению.ПримерыР1.

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