Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты ООП.docx
Скачиваний:
2
Добавлен:
21.04.2019
Размер:
87.01 Кб
Скачать

12. Понятие и назначение итераторов. Проектирование, реализация и использование итератора (на примере динамического списка).

Иетратор – это обобщение концепции указателей: они ссылаются на элементы контейнера. Их можно инкрементировать, как обычные указатели, и они будут ссылаться последовательно на все элементы контейнера(можно представить в виде кабеля, связывающего элементы)

class SmartPointer { //Привожу пример тупого итератора

private:

float* p; // обычный указатель

public:

float operator*() {}

float operator++() {}

};

void main() {

….

SmartPointer sptr = start_addres;

for(int j=0; j<SIZE; j++)

cout<< *sptr++;

}

  1. Множественное наследование: определение, реализация, использование экземпляров производного и базовых классов. Возможные неоднозначности, их устранение. Виртуальные классы, их назначение. Определение и реализация производных классов, использующих виртуальные базовые классы. Вызов конструкторов виртуального класса.

class A { //делаем виртуальный класс

friend class B;

A(); // конструктор доступен только внутри класса и его друга B public:

int data;

virtual void show() = 0; //виртуальная функция

};

class B:virtual public A {

public:

B() { … } //Конструктор доступен всем

void show() {

cout << data << endl;

};

};

class C:virtual public A {

public:

void show() {

cout << data << endl;

};

};

class D:public B, public C {

public:

D() {} //Тут ошибка, т.к. конструктор A не доступен данному классу…

void show() {--||--};

int getdata() {

return data}; //Правильно получаем данные, которые, как бы, одинаковы в родительских классах

};

  1. Шаблоны: назначение и типы шаблонов. Шаблоны функций: определение, реализация. Использование функций шаблона. Параметризованные классы: определение и реализация. Использование экземпляров класса шаблона. Использование механизма наследования в шаблонах классов. Стандартная библиотека шаблонов STL: общая характеристика, состав, основные компоненты. Использование итераторов в классах STL. Пример использования класса Vector.

Шаблоны позволяют использовать одни и те же функции или классы для обработки данных разных типов.

template<class T> // Шаблон функции

T abs(T n)

{return (n<0) ? –n : n; } //вычисление модуля

Int main() {

int int1 = -6;

double dub1 = 9.95;

int1 = abs(int1); //int1 = 6

dub1 = abs(dub1); //dub = 9.95

};

В С++ параметризованный класс создается с помощью ключевого слова template.

template <class Type > classname { . . . } ;

Параметр Туре представляет любой тип, передаваемый шаблону. Это может быть встроенный С++-тип или определенный пользователем класс.

STL содержит несколько основных сущностей. Три наиболее важные из них - это контейнеры, алгоритмы и итераторы.

Контейнер – это способ организации хранения данных.

Алгоритм – процедура, применяемая к контейнеру для обработки данных.

Итератор – это обобщение концепции указателей: они ссылаются на элементы контейнера.

STL делится на две категории: последовательные(стек, векторы, списки…) и ассоциативные(множества, мультимножества…)

Вектор – это, так сказать, умные массивы. Они занимаются автоматическим размещением себя в памяти, расширением и сужением своего размера по мере вставки или удаления данных. Векторы можно использовать, в каком-то смысле, как массивы, обращаясь к элементам через [].

#include<vector>

……..

int main() {

vector<int> v; //создать вектор

v.push_back(10); //внести данные в конец вектора

v.push_back(11);

v.push_back(12);

v.push_back(13);

v[0]=20; //заменяем новыми значениями

v[3]=23;

for(int i=0; i<v.size(); i++) //выводим содержимое

cout << v[j] << ‘ ‘; //20 11 12 23

cout << endl;

return 0;

}

  1. Файловый потоковый ввод-вывод: иерархия и назначение классов. Основные методы для организации потокового ввода-вывода. Определение состояния потока. Организация работы с файлами: классы, основные методы. Реализация произвольного доступа к файлам.