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

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

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

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

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

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

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

Введение в наследованиеХотя более полно наследование (inheritance) обсуждается в главе 7, предварительно с ним необходимо познакомиться уже сейчас. Применительно кC++ наследование — это механизм, посредством которого один класс можетнаследовать свойства другого. Наследование позволяет строить иерархиюклассов, переходя от более общих к более специальным.Для начала необходимо определить два термина, обычно используемые приобсуждении наследования. Когда один класс наследуется другим, класс, который наследуется, называют базовым классом (base class). Наследующийкласс называют производным классом (derived class).

Обычно процесс наследования начинается с задания базового класса. Базовый класс определяетвсе те качества, которые будут общими для всех производных от него классов. В сущности, базовый класс представляет собой наиболее общее описание ряда характерных черт. Производный класс наследует эти общие чертыи добавляет свойства, характерные только для него.Чтобы понять, как один класс может наследовать другой, давайте начнем спримера, который, несмотря на свою простоту, иллюстрирует несколькоключевых положений наследования.Для начала — объявление базового класса:// Определение базового классаclass В {int i;public:void set_i(int n) ;int g e t _ i ( ) ;};Теперь объявим производный класс, наследующий этот базовый:// Определение производного классаClass D: public В {int j;58___СамоучительC++public:void set_j (int n) ;int raul () ;Внимательно посмотрите на это объявление. Обратите внимание, что послеимени класса D имеется двоеточие, за которым следует ключевое словоpublic и имя класса В.

Для компилятора это указание на то, что класс D будет наследовать все компоненты класса В. Само ключевое слово public информирует компилятор о том, что, поскольку класс В будет наследоваться,значит, все открытые элементы базового класса будут также открытымиэлементами производного класса. Однако все закрытые элементы базовогокласса останутся закрытыми и к ним не будет прямого доступа из производного класса.Ниже приводится законченная программа, в которой используются классыВ и D:// Простой пример наследования^include <iostream>using namespace std;// Определение базового классаclass В {int i;public:void set_i(int n) ;int get_i ( ) ;// Определение производного классаclass D: public В {int j;public:void set_j {int n) ;int mul ( ) ;// Задание значения i в базовом классеvoid B::set_i(int n}{i = n;}// Возвращение значения i в базовом классеint В: :get_i ()<return i;Глава2.Введениевклассы_59// Задание значения j в производном классеvoid D: :set_j (int n)tj = n;// Возвращение значения i базового класса и j — производногоint D: :mul (}// производный класс может// вызывать функции-члены базового классаreturn j * get_i(};}int main ( ){D ob;ob.set_i (10) ; // загрузка i в базовый классob.set_j(4); // загрузка j в производный классcout « ob.mul(); // вывод числа 40return 0;1Обратите внимание на определение функции mul().

Отметьте, что функцияget_i()j которая является членом базового класса В, а не производного D,вызывается внутри класса D без всякой связи с каким бы то ни было объектом. Это возможно потому, что открытые члены класса В становятся открытыми членами класса D. В функции mu1() вместо прямого доступа к i,необходимо вызывать функцию get_i(), поскольку закрытые члены базовогокласса (в данном случае i) остаются закрытыми для нее и недоступными излюбого производного класса. Причина, по которой закрытые члены классастановятся недоступными для производных классов — поддержка инкапсуляции. Если бы закрытые члены класса становились открытыми просто посредством наследования этого класса, инкапсуляция была бы совершеннонесостоятельна.Здесь показана основная форма наследования базового класса:class имя производного класса; с д имя_базового класса {Здесь с_д (спецификатор доступа) — это одно из следующих трех ключевыхслов: public (открытый), private (закрытый) или protected (защищенный).60Самоучитель С+_+_В данном случае для наследования класса используется именно public.

Полное описание этих спецификаторов доступа будет дано позже.| Примерыч^____,,1. Ниже приведена программа, которая определяет общий базовый класс fruit,описывающий некоторые характеристики фруктов. Этот класс наследуетсядвумя производными классами Apple и Orange. Эти классы содержат специальную информацию о конкретном фрукте (яблоке или апельсине).// Пример наследования классов^include <iostream>ttinclude <cstring>using namespace std;enum yn (no, yes};enum color {red, yellow, green, orange};void out (enum yn x) ;char *c[ ] = {"red", "yellow", "green", "orange"};// Родовой класс фруктовclass fruit {// В этом базовом классе все элементы открытыpublic:enum yn annual;enum yn perennial;enum yn tree;enum yn tropical;enum color clr;char name [40] ;>;// Производный класс яблокclass Apple: public fruit {enurn yn cooking;enum yn crunchy;enum yn eating;public:void seta (char *n, enum color c, enum yn ck, enum yn crchy,enum yn e) ;void showf) ;// Производный класс апельсиновclass Orange: public fruit (enum yn juice;2,ГлаваВведениевклассы_67enum yn sour;enum yn eating;public:void seto(char *n, enum color c, enum yn j, enum yn sr, enum yn e) ;void show ( ) ;void Apple: : seta (char *n, enum color c, enum yn ck, enum yn crchy,enum yn e){strcpy (name, n) ;annual = no;perennial = yes;tree = yes;tropical = no;clr = c;cooking = ck;crunchy = crchy;eating = e;void Orange: :seto (char *n, enum color c, enum yn j, enum yn sr,enum yn e){strcpy (name, n} ;annual = no;perennial = yes;tree = yes;tropical = yes;clr = c;juice = j;sour = sr;eating = e;void Apple: :show(){coutcoutcoutcoutcoutcoutcoutcoutcoutcout««««««««««name « " яблоко — это: " « "\n";"Однолетнее растение: "; out{annual};"Многолетнее растение: "; out (perennial) ;"Дерево: "; out(tree);"Тропическое: "; out (tropical) ;"Цвет: " « c[clr] « "\n";"Легко приготавливается: "; out (cooking) ;"Хрустит на зубах: "; out (crunchy) ;"Съедобное: "; out (eating);"\n" ;62_СамоучительC++void Orange : : show { ){cout « name « " апельсин — это: " « "\n";cout « "Однолетнее растение: "; out (annual);cout « "Многолетнее растение: "; out (perennial) ;cout « "Дерево: "; out (tree);coutcoutcoutcoutcoutcout««««««"Тропическое: "; out (tropical) ;"Цвет: " « c[clr] « "\n";"Годится для приготовления сока: "; out(juice);"Кислый: "; out (sour) ;"Съедобный: "; out (eating);"\n";void out{enum yn x){if (x==no) cout « "нет\п";else cout « "да\п";int main(){Apple al, a2;Orange ol, o2;al .

seta ("Красная прелесть", red, no, yes, yes);a2. seta ("Джонатан", red, yes, no, yes) ;ol. setoC'nyn", orange, no, no, yes);o2.seto ("Валенсия", orange, yes, yes, no);al .show( ) ;a2 . show ( ) ;01 .show{ ) ;02 . show ( ) ;return 0;Как можно заметить, базовый класс fruit определяет несколько свойств, характерных для фруктов любого типа, (Конечно, чтобы сократить пример итаким образом приспособить его для книги, класс fruit отчасти упрощен.)Например, все фрукты растут на однолетних или многолетних растениях.

Всефрукты растут на деревьях или на растениях другого типа, таких как лозаили куст. Все фрукты имеют цвет и название. Затем такой базовый класс наследуется классами Apple и Orange. Каждый из этих классов обеспечиваетобъект информацией, характерной для фруктов конкретного типа.Этот пример иллюстрирует основной смысл наследования. Создаваемый здесьбазовый класс определяет основные черты, связанные со всеми фруктами.Глава 2. Введение в классы63_Производным классам предоставляется возможность обеспечения тех характеристик, которые являются характерными в каждом конкретном случае.Эта программа раскрывает другой важный аспект наследования: производные классы не "владеют" базовым классом безраздельно. Он может наследоваться любым количеством классов.Упражнения)^~^г^1.

Дан следующий базовый класс:class area_cl {public:double height;double width;создайте два производных класса rectangle и isosceles, которые наследуют базовый класс агеа_с1. Каждый класс должен включать в себя функцию агеа(),которая возвращает площадь соответственно прямоугольника (rectangle) иравнобедренного треугольника (isosceles). Для инициализации переменныхheight и width (высота и длина основания, соответственно) используйте конструктор с параметрами.2.4.

Указатели на объектыДо сих пор вы осуществляли доступ к членам объекта с помощью оператораточка (.). Если вы работаете с объектом, то это правильно. Однако доступ кчлену объекта можно получить также и через указатель на этот объект. В этомслучае обычно применяется оператор стрелка (->). (Аналогичным способомоператор стрелка (->) используется при работе с указателем на структуру.)Вы объявляете указатель на объект точно так же, как и указатель на переменную любого другого типа. Задайте имя класса этого объекта, а затем имяпеременной со звездочкой перед ним. Для получения адреса объекта передним необходим оператор &, точно так же, как это делается для полученияадреса переменной другого типа.Как и для любого другого указателя, если вы инкрементируете указатель наобъект, он будет указывать на следующий объект такого же типа.Примеры1. Простой пример использования указателя на объект:#include <iostream>using namespace std;64Самоучитель C++class myclass {int a;public:myclass (int x} ; // конструкторint get ( } ;myclass: :myclass (int x)int myclass: : get ()freturn a;int main(),myclass ob(120); // создание объектаmyclass *p; // создание указателя на объектр = sob; // передача адреса ob в рcout « "Значение, получаемое через объект:" « ob.getO;cout « "\n";cout « "Значение, получаемое через указатель : " « p->get ( } ;return 0 ;.Отметьте, как объявлениеmyclass *p;создает указатель на объект класса myclass.

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