Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Производные классы: простое наследование ⇐ ПредыдущаяСтр 4 из 4
Основные понятия и определения: базовый класс и производные классы; производный класс есть базовый, обладающий дополнительными возможностями. Производный класс наследует все свойства базового класса и добавляет что-то свое. Отсюда, базовый класс - более абстрактное понятие (шире, чем производный); производный класс - более конкретное понятие (больше - по объему информации, чем базовый класс). Отсюда:
базовый класс
производный класс
В производном классе имена методов (и членов - данных) могут совпадать с именами из базового класса. Простое наследование: правила определения производного класса Правила объявления производных классов. Две проблемы: могут ли (и как) методы производного класса обращаться к членам базового класса (доступность изнутри производного класса) и как члены базового класса, унаследованные производным классом, могут быть доступны извне производного класса. Первая проблема решается уровнем видимости членов в базовом классе: class B{ private: // закрытая часть класса; не доступна никому, кроме методов класса (в том числе // не доступна и из производного класса) protected: // защищенная часть класса; доступна из методов базового и производного класса // (но не доступна извне класса) public: // открытая часть класса; доступна везде }; Вторая проблема решается способом наследования: class D: тип_наследования B{ ... }; тип_наследования: одно из private, protected, public. Тип наследования не смягчает, но усиливает защиту данных: члены класса, имевшие менее защищенный уровень видимости в базовом классе, в производном классе приобретают уровень видимости, определяемый типом наследования.
Примеры. Реализация конструкторов производного класса. Примеры. Пример производного класса Пример использования простого наследования: класс “точка” - базовый для класса “окружность”. Методы в классе “точка”: расстояние между двумя точками, вывод координат точки. Для класса окружность: свои дополнительные методы, отсутствовавшие в классе “точка” (пересечение окружностей); полностью наследуется метод - расстояние между точками (центрами двух окружностей) и требуется переопределить метод вывода окружности.
class Point{ protected: int x, y; public: // конструкторы Point():x(0), y(0){} Point(int x0):x(x0),y(x0){} Point(int x0, int y0):x(x0), y(y0){} Point(const Point &p):x(p.x), y(p.y){} void print(); float distance(Point p); }; Реализация класса: void Point::print() { cout << '(' << p.x << ", " << p.y << ')'; } float Point::distance(Point p) { float dx = x - p.x; float dy = y - p.y; return sqrt(dx * dx + dy * dy); } Теперь - производный класс Окружность: class Circle: public Point{ private: int rad; public: // конструкторы Circle():rad(0){} // Вызывается пустой конструктор базового класса Circle(int r):rad(r){} Circle(int x, int r):Point(x), rad(r){} Circle(int x, int y, int r):Point(x, y), rad(r){} Circle(Point p, int r):Point(p), rad(r){} // методы void print(); int intersect(Circle c); }; Теперь - реализация методов void Circle::print() { Point::print(); cout << " with rad " << rad; } int Circle::intersect(Circle c) { return distance(c) < rad + c.rad; } Метод distance из класса Point наследуется классом Circle. Использование классов: Circle c1(3), c2(2, 2); cout << "distance between " << c1 << " and " << c2 << " is " << c1.distance(c2) << endl; cout << c1 << " and " << c2; if(c1.intersect(c2)) cout << " are intersected " << endl; else cout << " are not intersected " << endl;
|
|||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 208; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.182.250 (0.007 с.) |