- •Понятия объекта, класса объектов.
- •2. Основные понятия ооп: инкапсуляция, наследование и полиморфизм.
- •Модульное программирование.
- •4. Нисходящее программирование
- •5. Структурное програММирование
- •6. Прототипы функций.
- •7. Перегрузка функций
- •8. Значения формальных параметров по умолчанию.
- •9. ССылка и параметры-сСылки
- •10. Встраиваемые функцИи
- •11. ОперацИи new и delete
- •12. ФункцИи-члены и даННые-члены
- •13. Интерфейсы и реализация
- •14. Конструкторы и инициализация
- •15. Конструктор без параметров (по умолчанию)
- •16. Деструкторы и очистка
- •17. Конструктор копирования
- •18. Указатель this
- •19. Статические члены: функции и данные.
- •20. Указатели на члены.
- •21. Структуры и объединения
- •22. Константные члены-функции и константные объекты.
- •Void f();
- •Перегрузка бинарных и унарных операций.
- •Перегруженные операции индексирования, вызова функций, инкремента и декремента префиксных и постфиксных.
- •Перегрузка new, delete
- •Преобразование типов, определяемых пользователем с помощью конструкторов и операций преобразования.
- •Неявное преобразование типов
- •30. Наследование клаССов и производные клаССы.
- •31. Конструкторы, деструкторы и наследование.
- •Множественное наследование
- •Виртуальные базовые классы.
- •Virtual void draw();
- •Виртуальные функции.
- •35. Полиморфизм.
- •36. Абстрактные клаССы и чистые виртуальные функцИи.
- •37. Заголовочные файлы.
- •38. ПредопределЁнНые объекты и потоки.
- •39. Ошибки потоков.
- •41. Конструкторы файловых потоков.
- •42. Открытие файлов в разных режимах.
- •43. ВВод-вывод в файлы.
- •44. Шаблоны функций.
- •45. Параметры шаблонов.
- •46. Шаблоны клаССов.
30. Наследование клаССов и производные клаССы.
Важнейшим свойством ООП является наследование. Например, есть класс с определенными свойствами. В целом он нас устраивает, но необходимо добавить некоторую функциональность. Можно создать новый класс на основе существующего через наследование. Исходный класс называют предок/родитель/базовый класс/parent, а новый класс - наследник/потомок/производный класс/derived/child.
Производный класс обладает всеми свойствами и методами предка (он их унаследовал), плюс добавляются новые, может быть базовым для других классов. Так строится иерархия классов – важное понятие ООП.
При необходимости в производном классе можно перекрыть (переопределить) свойства и методы базового класса.
Форма записи заголовка производного класса:
class <наследник> : <режим доступа> <базовый класс> {<…>}
class B : public A // класс B наследует классу A, класс B выведен из A
{
// реализация B, расширяющая возможности А
}
Режимы доступа: внешнее, защищенное и внутреннее наследование:
Режим доступа public – внешнее наследование - интерфейс базового класса (раздел public) становится внешним интерфейсом производного класса (применяется чаще всего).
Режим доступа protected – защищенное наследование - внешний и защищенный разделы базового класса становится защищеными разделами производного класса, т.е. доступны только при следующем наследовании.
Режим доступа private – внутреннее наследование - внешний и защищенный разделы базового класса становится внутренними разделами производного класса, недоступны снаружи.
31. Конструкторы, деструкторы и наследование.
Базовый класс, производный класс или оба класса вместе могут иметь конструкторы и/или деструкторы.
Если у базового и у производного классов имеются конструкторы и деструкторы, то конструкторы выполняются в порядке наследования, а деструкторы - в обратном порядке. Таким образом, конструктор базового класса выполняется раньше конструктора производного класса. Для деструкторов правилен обратный порядок: деструктор производного класса выполняется раньше деструктора базового класса.
Синтаксис передачи аргументов из производного в базовый класс показан ниже:
конструктор_произв_класса(список-арг) : базов_класс (список_арг) {
// тело конструктора производного класса
Для базового и производного классов допустимо использовать одни и те же аргументы. Кроме этого, для производного класса допустимо игнорирование всех аргументов и передача их напрямую в базовый класс.
В этой очень короткой программе показано, в каком порядке выполняются конструкторы и деструкторы базового и производного классов:
#include <iostream>
using namespace std;
class base {
public:
base() { cout ≪ "Работа конструктора базового класса \n"; }
~base ( ) { cout ≪ "Работа деструктора базового класса \n"; }
};
class derived: public base (
public:
derived() ( cout ≪ "Работа конструктора производного класса\n";}
~derived () ( cout ≪ "Работа деструктора производного класса\n";}
};
int main ()
{
derived о;
return 0;
}
После выполнения программы на экран выводится следующее:
Работа конструктора базового класса
Работа конструктора производного класса
Работа деструктора производного класса
Работа деструктора базового класса