Содержание
- 2. Лекция 6. Наследование. Шаблоны классов Простое и множественное наследование классов. Виртуальные методы. Абстрактные классы. Создание и
- 3. ©Павловская Т.А. (СПбГУ ИТМО) Наследование Наследование является мощнейшим инструментом ООП и применяется для следующих взаимосвязанных целей:
- 4. ©Павловская Т.А. (СПбГУ ИТМО) Синтаксис наследования class имя : [private | protected | public] базовый_класс {
- 5. ©Павловская Т.А. (СПбГУ ИТМО) В наследнике можно описывать новые поля и методы и переопределять существующие методы.
- 6. ©Павловская Т.А. (СПбГУ ИТМО) Правила наследования
- 7. ©Павловская Т.А. (СПбГУ ИТМО) private элементы базового класса в производном классе недоступны вне зависимости от ключа.
- 8. ©Павловская Т.А. (СПбГУ ИТМО) Если базовый класс наследуется с ключом private, можно выборочно сделать некоторые его
- 9. ©Павловская Т.А. (СПбГУ ИТМО) Простое наследование class daemon : public monstr{ int brain; public: // -------------
- 10. ©Павловская Т.А. (СПбГУ ИТМО) Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы. Порядок вызова
- 11. ©Павловская Т.А. (СПбГУ ИТМО) const daemon& operator = (daemon &M){ if (&M == this) return *this;
- 12. ©Павловская Т.А. (СПбГУ ИТМО) Наследование деструкторов Деструкторы не наследуются. Если деструктор в производном классе не описан,
- 13. ©Павловская Т.А. (СПбГУ ИТМО) Раннее связывание Описывается указатель на базовый класс: monstr *p; Указатель ссылается на
- 14. ©Павловская Т.А. (СПбГУ ИТМО) Виртуальные методы virtual void draw(int x, int y, int scale, int position);
- 15. ©Павловская Т.А. (СПбГУ ИТМО) Описание и использование виртуальных методов Если в предке метод определен как виртуальный,
- 16. ©Павловская Т.А. (СПбГУ ИТМО) - содержит признак = 0 вместо тела: virtual void f(int) = 0;
- 17. ©Павловская Т.А. (СПбГУ ИТМО) Множественное наследование class monstr{ public: int get_health(); ... }; class hero{ public:
- 18. ©Павловская Т.А. (СПбГУ ИТМО) class monstr{ ... }; class daemon: virtual public monstr{ ... }; class
- 19. ©Павловская Т.А. (СПбГУ ИТМО) Множественное наследование применяется для того, чтобы обеспечить производный класс свойствами двух или
- 20. ©Павловская Т.А. (СПбГУ ИТМО) Виды отношений между классами ассоциация (два класса концептуально взаимодействуют друг с другом);
- 21. ©Павловская Т.А. (СПбГУ ИТМО) Шаблоны классов Параметризованный класс создает семейство родственных классов, которые можно применять к
- 22. ©Павловская Т.А. (СПбГУ ИТМО) Типы могут быть как стандартными, так и определенными пользователем. Для их описания
- 23. ©Павловская Т.А. (СПбГУ ИТМО) Для любых параметров шаблона могут быть заданы значения по умолчанию, например: template
- 24. ©Павловская Т.А. (СПбГУ ИТМО) Cинтаксис описания методов шаблона на примере: template void List ::print() { /*
- 25. ©Павловская Т.А. (СПбГУ ИТМО) Правила описания шаблонов Локальные классы не могут содержать шаблоны в качестве своих
- 26. ©Павловская Т.А. (СПбГУ ИТМО) Переменные могут быть целого или перечисляемого типа, а также указателями или ссылками
- 27. ©Павловская Т.А. (СПбГУ ИТМО) Пример параметра–указателя void f1() { cout void f2() { cout template struct
- 28. ©Павловская Т.А. (СПбГУ ИТМО) Использование шаблонов классов При описании объекта после имени шаблона в угловых скобках
- 29. ©Павловская Т.А. (СПбГУ ИТМО) При использовании параметров шаблона по умолчанию список аргументов может оказаться пустым, при
- 30. ©Павловская Т.А. (СПбГУ ИТМО) Для упрощения использования шаблонов классов можно применить переименование типов с помощью typedef:
- 31. ©Павловская Т.А. (СПбГУ ИТМО) Организация исходного кода Принято размещать все определение шаблонного класса в заголовочном файле
- 32. ©Павловская Т.А. (СПбГУ ИТМО) // Main.cpp #include #include "Point.h" using namespace std; int main() { Point
- 33. ©Павловская Т.А. (СПбГУ ИТМО) Специализация шаблонов классов Для специализации метода требуется определить вариант его кода, указав
- 34. ©Павловская Т.А. (СПбГУ ИТМО) Специализация всего класса // общий шаблон template class Sample { bool Less(T)
- 35. ©Павловская Т.А. (СПбГУ ИТМО) Использование классов функциональных объектов для настройки шаблонных классов template struct LessThan {
- 36. ©Павловская Т.А. (СПбГУ ИТМО) int main() { PairSelect > ps1(13, 9); ps1.OutSelect(); // вывод: 9 PairSelect
- 38. Скачать презентацию