- •Оглавление
- •1 Основные методы программирования. Лекция №2 5
- •2 Методы объектно-ориентированного программирования. Лекция №6. 15
- •2.4 Вопросы по теме 54
- •3 Объектно-ориентированное проектирование. Лекция №12 55
- •3.4 Вопросы по теме 74
- •Введение. Лекция №1.
- •1Основные методы программирования. Лекция №2
- •1.1Процедурное программирование Методы процедурного программирования
- •Этапы разработки программ. Лекция 3.
- •1.2Объектно-ориентированное программирование Лекция №4
- •Этапы разработки оо программ. Лекция №5
- •Конструкторы и деструкторы. Лекция №7.
- •Друзья класса
- •2.2Наследование. Лекция №8
- •Производный класс
- •Простое наследование
- •Множественное наследование. Лекция №9
- •Виртуальные базовые классы
- •2.3Полиморфизм. Лекция №10
- •Перегрузка операций
- •Преобразования типов, определяемые классом
- •Перегрузка функций.
- •Чистый полиморфизм
- •Виртуальные элементы-функции
- •Абстрактные классы. Лекция №11.
- •Параметрический полиморфизм
- •Шаблоны функций
- •Шаблоны классов
- •2.4Вопросы по теме
- •3Объектно-ориентированное проектирование. Лекция №12
- •3.1Концепция объектно-ориентированного проектирования
- •3.2Проектирование структурной схемы программы Составление начальной иерархии и структуры классов
- •Реорганизация иерархии и структуры классов
- •Организационная структура программы
- •3.3Проектирование файлов интерфейсов классов. Лекция № 13. Файл интерфейса базового класса
- •Файлы интерфейсов производных классов
- •Файл управления
- •3.4Вопросы по теме
- •Общие моменты разработки программы на основе объектно-ориентированного подхода
- •Приложение а
Абстрактные классы. Лекция №11.
В некоторых случаях виртуальная функция, объявленная в базовом классе не нужна для объектов этого класса, т.е. базовый класс не нуждается в своих объектах. Тогда базовый класс рассматривается как абстрактный класс.
Абстрактным классом называется базовый класс в иерархии наследования, содержащий чистые виртуальные функции, определенные в производных классах. Чистая виртуальная функция - это виртуальная функция, объявленная в абстрактном классе со спецификатором (=0) и определенная в производном классе. Пример:
class cl1 class cl2:public cl1 class cl3:public cl2
{ public: { public: { public:
virtual void vyvod()=0;}; void vyvod() {...} }; void vyvod() {...} };
Абстрактный класс характеризуется следующими свойствами:
имеет чистые виртуальные функции со спецификатором =0;
если в производном классе чистая виртуальная функция не определена, то такой класс тоже считается абстрактным;
не имеет объектов и используется только как базовый класс;
Параметрический полиморфизм
Параметрический полиморфизм - это механизм использования обобщенного определения функции или класса (шаблона) для автоматической генерации новых функций или классов.
Шаблоны функций
Шаблон функции - это обобщенное определение функции, использующее типы в качестве параметров функции.
Синтаксис шаблона функции:
template <class t1[,...]> //спецификация шаблона
t_vozvr imf(t1 p1[,...]) //определение функции
{ //t1 - идентификатор, обозначающий тип
... //imf - имя функции
} //p1 - параметр функции типа t1
Шаблон функции характеризуется следующими свойствами:
состоит из спецификации шаблона и определения функции; спецификация имеет список параметров шаблона, окаймленный скобками <>; определение функции использует параметры шаблона; например:
template <class tip>
void vyvod(tip x) { tip y=x; cout<<y;}
параметр шаблона - это любой идентификатор с ключевым словом class, обозначающий параметризованный тип; слово class означает обобщенное понятие любого типа, включая и тип class;
в списке параметров функции можно иметь также переменные со встроенными типами и типами, определяемыми пользователем; например: void vvod(tip x,int n);
при вызове функции компилятор автоматически создает экземпляр функции, заменяя параметры шаблона на заданные в операторе вызова типы; например: int a; vyvod(a);
могут быть перегруженными, как и обычные функции.
Шаблоны классов
Шаблон класса - это обобщенное определение класса, использующее тип в качестве параметра класса.
Синтаксис шаблона класса:
template <class t1[,...]>//спецификация шаблона
class imcl //определение класса
{ //t1 - идентификатор, обозначающий тип
... //class t1 - параметр шаблона
} //imcl - имя класса
Синтаксис оператора вызова:
imcl<tip1> obj; //объявление объекта класса с типом tip1
imcl<int> obj1; //создается класс для типа int
imcl<t> obj2; //создается класс для типа t
Шаблон класса характеризуется следующими свойствами:
состоит из спецификации шаблона и определения класса; спецификация имеет список параметров шаблона, окаймленный скобками <>; определение класса использует параметры шаблона;
параметр шаблона - это любой идентификатор с ключевым словом class, обозначающий параметризованный тип; слово class означает обобщенное понятие любого типа, включая и тип class;
в списке параметров шаблона можно иметь также переменные со встроенными типами и типами, определяемыми пользователем, так называемые нетипированные (нетиповые) параметры, значения которых должны быть константами; например: <class t,int n>;
при вызове класса компилятор автоматически создает экземпляр класса, заменяя параметры шаблона на заданные в операторе вызова типы.