Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Производные классы: простое наследованиеСодержание книги
Поиск на нашем сайте Основные понятия и определения: базовый класс и производные классы; производный класс есть базовый, обладающий дополнительными возможностями. Производный класс наследует все свойства базового класса и добавляет что-то свое. Отсюда, базовый класс - более абстрактное понятие (шире, чем производный); производный класс - более конкретное понятие (больше - по объему информации, чем базовый класс).
базовый класс
В производном классе имена методов (и членов - данных) могут совпадать с именами из базового класса. Простое наследование: правила определения производного класса Правила объявления производных классов. Две проблемы: могут ли (и как) методы производного класса обращаться к членам базового класса (доступность изнутри производного класса) и как члены базового класса, унаследованные производным классом, могут быть доступны извне производного класса. Первая проблема решается уровнем видимости членов в базовом классе: 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; просмотров: 520; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.005 с.) |