Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры(ооп) кроме 45,46,52.docx
Скачиваний:
2
Добавлен:
24.09.2019
Размер:
117.21 Кб
Скачать

11.Абстрактные классы

Если класс имеет хотя бы одну чисто виртуальную функцию, то он называется абстрактным. Для абстрактного класса нельзя создать объекты и он используется только как базовый класс для других классов. чисто виртуальные функции - такие ф, тело которых, как правило, не определено.virtual прототип функции = 0; Главное назначение абстрактных классов – в определении интерфейса для некоторой иерархии классов.

ласс можно сделать абстрактным, даже если все его функции определны. Это можно сделать, например, чтобы быть уверенным, что объект этого класса создан не будет. Обычно для этих целей выбирается деструктор.

class base { компоненты-данные public: virtual

~base() = 0; компоненты-функции } base ::~base()

{реализация деструктора}

Объект класса base создать невозможно, в то же время деструктор его определен и будет вызван при разрушении объектов производных классов.

13.Шаблоны.Параметрезированные классы

Параметризированный класс – некоторый шаблон, на основе которого

можно строить другие классы. Этот класс можно рассматривать как некоторое описание множества классов, отличающихся только типами их данных. В С++ используется ключевое слово template для обеспечения параметрического полиморфизма. Параметрический полиморфизм позволяет использовать один и тот же код относительно различных типов (параметров тела кода). Это наиболее полезно при определении контейнерных классов. Шаблоны определения класса и шаблоны определения функции позволяют многократно использовать код, корректно по отношению к различным типам, позволяя компилятору автоматизировать процесс реализации типа. Шаблон класса определяет правила построения каждого отдельного класса из некоторого множества разрешенных классов. Спецификация шаблона класса имеет вид:

template <список параметров>

class объявление класса

Список параметров класса-шаблона представляет собой идентификатор

типа, подставляемого в объявление данного класса при его генерации. Идентификатору типа предшествует ключевое слово class или typename. Рассмотрим пример шаблона класса работы с динамическим массивом и выполнением контроля за значениями индекса при обращении к его элементам.

#include <iostream>

using namespace std;

#include <string.h>

template <class T> // или иначе template <typename T>

class vector

{ T *ms;

int size;

public:

vector() : {}

~vector(){

void inkrem()

{ … }

void decrem(void

{ ...}

};

int main()

{ …}

В С++, так же как и для класса, для функции (глобальной, то есть не являющейся компонентой-функцией) может быть описан шаблон. Это позволит снять достаточно жесткие ограничения, накладываемые механизмом формальных и фактических параметров при вызове функции. Рассмотрим это на примере функции, вычисляющей сумму нескольких аргументов.

template <class T1,class T2>

T1 sm(T1 a,T2 b) // описание шаблона

{ return (T1)(a+b); // функции c 2 параметрами }

template <class T1,class T2,class T3>

T1 sm(T1 a,T2 b,T3 c) // описание шаблона функции

{ return (T1)(a+b+c); // функции c 3 параметрами}

void main()

{cout<<"сумм sm(int,int) = "<<sm(4,6)<<endl;

cout<<"суммsm(int,int,int)="<<sm(4,6,1)<<endl;

cout<<"cумм sm(int,double) = "<<sm(5,3)<<endl; cout<<"сумм sm(double,int,short)=" <<

sm(.4,6,(short)1)<<endl; }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]