Практикум для изучения дисциплины «Основы программирования»



Pdf көрінісі
бет78/81
Дата08.07.2020
өлшемі1,55 Mb.
#74978
түріПрактикум
1   ...   73   74   75   76   77   78   79   80   81
Байланысты:
А.А. Тюгашев
А.А. Тюгашев, А.А. Тюгашев, А.А. Тюгашев
ЗАМЕЧАНИЕ 
Нужно  четко  различать  объекты  и  классы.  Каждый  из  создаваемых  объектов 
класса имеет уникальный набор значений атрибутов, хотя все объекты и имеют 
одинаковый  набор  (имен)  атрибутов.  Образно  выражаясь,  класс —  это 
выкройка  штанов,  а  объект —  конкретные  штаны,  сшитые  по  выкройке.  По 
одной выкройке можно сшить много штанов. 
Поговорим  о  доступе  к  членам  класса.  В  С++  используются  три 
возможных  модификатора  доступа —  public,  private  и  protected. 
Модификатор  доступа  заканчивается  двоеточием  и  влияет  на  идущие 
после него в классе переменные-члены и функции-члены, расположенные 
до следующего модификатора доступа. 
Если модификаторы доступа отсутствуют, по умолчанию все члены класса 
считаются закрытыми (private). Закрытые члены класса доступны лишь 
изнутри  объектов  самого  класса  и  из  так  называемых  дружественных 
функций  (объявляемых  с  использованием  специального  ключевого  слова 
friend
).  Защищенные,  или  protected,  члены  класса  доступны  в 


152 
 
объектах  данного  класса  и  унаследованных  из  него  классов  (потомках). 
Публичные члены public доступны отовсюду. 
Рассмотрим наследование в С++ на следующем примере. Определим класс 
студент  (student).  Никто  не  будет,  вероятно,  спорить  с  тем,  что 
студент —  человек.  Соответственно,  было  бы  удобно  унаследовать  класс 
student
 
от  класса  chelovek.  Записать  это  на  языке  С++  можно 
следующим образом: 
// класс студент, унаследованный от человека 
class student:public chelovek 

  char Gruppa[25]; // 
группа 
  float srball; // 
средний балл 
  float stipendia; // 
размер стипендии 
}; 
Все  атрибуты  человека —  фамилия,  имя,  отчество,  год  рождения — 
сохраняются  и  у  студента.  В  то  же  время  для  студента  указываются  еще 
группа  (Gruppa)  и  успеваемость,  выражаемая  средним  баллом,  и  может 
указываться стипендия. 
Во  многих  языках  программирования  возможно  лишь  одиночное 
наследование,  когда  подкласс  имеет  ровно  один  суперкласс.  В  языке 
программирования  С++  поддерживается  множественное  наследование. 
Поясним этот механизм на примере. 
Рассмотрим  класс 
автомобиль.  С  одной  стороны,  автомобиль  можно 
рассматривать  как  транспортное  средство.  Важнейшими  свойствами  для 
транспортного  средства  являются  тип,  вместимость,  мощность,  скорость, 
расход топлива и т. д. С другой стороны, автомобиль — недешевый товар, 
для  которого  весьма  важны  цена,  марка  (производитель),  цвет  (особенно 
для  покупательниц  женского  пола,  чтобы  соблюсти  гармонию  с  цветом 
туфель). Определим два класса — транспортное средство и товар: 
// транспортное средство 
class trans 

  
float skorost; // скорость  
  
float moshnost; // мощность 
  int vmestimost; // 
вместимость 
}; 
 
// 
товар 
class tovar 



153 
 
Автомобиль 
Транспорт 
Товар 
-
Тип 
(
грузовой/пассажирский

-
скорость 
-
вместимость 
-
проходимость 
 
 
 
 
-
цена 
-
цвет 
-
марка 
-
год выпуска 
-
качество 
 
 
  char cwet[25]; // 
цвет  
  char proizvoditel[50]; // 
производитель 
  
float cena; // цена 
}; 
Класс 
автомобиль, выступающий одновременно в двух ипостасях — как 
транспортное средство и товар, может быть определен путем наследования 
от этих двух классов (рис. 25): 
 
 
 
 
 
 
 
 
 
 
Рис. 25 
// автомобиль — пример множественного наследования 
class automobile: trans,tovar 

}; 
При  этом  объекты  класса  automobile  будут  иметь  все  атрибуты  как 
транспортного средства, так и товара. 
Как  уже  говорилось,  в  унаследованных  классах  методы  базового  класса 
могут  быть  уточнены —  переопределены.  При  этом  функция,  которая 
изменяется  в  наследуемом  классе,  называется  виртуальной,  и  перед  ее 
именем  в  объявлении  базового  класса  необходимо  поставить  ключевое 
слово virtual. 
Рассмотрим  переопределение  функций  на  примере  базового  класса 


Достарыңызбен бөлісу:
1   ...   73   74   75   76   77   78   79   80   81




©www.engime.org 2024
әкімшілігінің қараңыз

    Басты бет