Понятие и назначение итераторов. Проектирование, реализация и использование итератора (на примере динамического списка).
Иетратор – это обобщение концепции указателей: они ссылаются на элементы контейнера. Их можно инкрементировать, как обычные указатели, и они будут ссылаться последовательно на все элементы контейнера(можно представить в виде кабеля, связывающего элементы)
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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!