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



 

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

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

private:

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

public:

float operator*() {}

float operator++() {}

};

void main() {

….

SmartPointersptr = start_addres;

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

cout<< *sptr++;

}

 

 


 

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

 

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

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() {--||--};

       intgetdata() {

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

};

 

 


 

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

 

 

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

 

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

T abs(T n)

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

 

Intmain() {

int int1 = -6;

double dub1 = 9.95;

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

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

};

 

 

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

 

template<classType>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(inti=0; i<v.size(); i++) //выводим содержимое

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

cout<<endl;

return 0;

}

 


 

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

 


Дата добавления: 2018-04-15; просмотров: 326; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!