- •2.Парадигми імперативного стилю.Парадигми процедур-ності.
- •3.Парадигма модульності.
- •4.Парадигма атд
- •5.Парадигма ооп.
- •7.Констуктори та деструктори.
- •8.Наслідування класів.
- •9.Обмеження доступу до базового кл.
- •12.Конкретні і абстрактні типи. Віртуальні ф-ії.
- •10. Конструктор базового класу. Ініціалізація полів кл
- •11.”Покажчик на себе”. Статичні поля класу.
- •13.Віртуальні конструктори та диструктори.Клонування.
- •14. Ефективний доступ до членів класу .Дружні ф-ії та дружні класи .
- •15.Множинне наслідування.
- •16.Віртуальні базові класи.
- •17.Перевантаження функцій.
- •18.Перевантаження унарних операцій.
- •22.Перетворення за допомогою конструкторів.
- •28.Елементи узагальненого програмування. Протеріччя з ооп. Поняття про ітератори та узагальнені алгоритми. Побудова узагальненої функції.
- •П алгоритми
- •30.Елементи узагальненого програмування. Контейнерно-ітераторна модель на основі шаблонних класів та шаблонних функцій.
- •Типи знань та методи їх представлення.
- •Парадигми імперативного стилю.Парадигми процедур-ності.
28.Елементи узагальненого програмування. Протеріччя з ооп. Поняття про ітератори та узагальнені алгоритми. Побудова узагальненої функції.
Протиріччя: парадигма ООП змушує інкапсулювати вл-ті і методи, притаманні якимся класам (обьєктам, типам), проте багато алгоритмів (їх ідея) не залежить від типу даних (напр. Сортування,пошук).
Вихід: Узагальнені алгоритми, коротко кажучи, це технологія, яка дозволяє абстректувати алг. від конкретних типів засобами ООП.
П алгоритми
search
for (p=Beg; p!=End; p++) if (*p==Patem)…Ok!
sort
Ітератори – те, що звязує алгоритми і структури даних.
Контейнер – структура даних, яка містить в собі послідовність елементів одного типу.
Ітератор – це узагальнений показжчик на ел-т контейнера, який має властивості:
1) itor ++ перехід до наступного елемента контейнера
* розіменування – перехід від зн-ня покозжчика до зн-ня ел-та контейнера, на який показчик показує.
Ітератор-об’єкт-покажчик,за до-помогою якого можна перебира-ти елементи контейнера. Т.я. доступ до контейнера робиться через покажчик,то треба опера-ції для такого покажчика;ітера-тори:++,--,==,!=,*.
Ітератор дає універсальний дос-туп до першого об’єкта і до ос-таннього елемента.Коли задаєть-ся діапазон через стандартний ітератор,то end вказує на позаос-танній елемент(уявний).
29.Елементи узагальненого програмування. Контейнерно-ітераторна модель на основі поліморфізму.
Інтрузивний контейнер – це контейнер всі ел-ти якого мають типи, що є похідними від одного базового типу.
int sum (Iter *beg, Iter *end)
{Iter *i=beg;
int s-0;
for ( ; (*i)!=(*end); (*i)++) s+= **i
}
При розіменуванні іт-ра не відомо наперед який тип ел-та ко-ра мусить розглядатися.
class Iter
{protected:
void *curr;
virtual
void operator ++(int){}
virtual
int operator *(){}
virtual
int operator !=(Iter i)
};
class List
{struct ListElem
{ListElem *next;}
Tobject *item;
ListElem *head;
Public:
…
friend class ListIter
};
class ListIter: public Iter
{public:
void operator ++(int x)
{curr=((ListElem*)
curr)->next;
}
int operator *()
{return ((ListElem)
curr)->item;
}
int operator != (Item i)
{return curr != i.curr;}
}
class Tobject
{public:
virtual
snt operator *()=0;}
class MyInt1: public Tobject
{int i;
public:
int operator *()
{return i;}
};
class MyInt2: public Tobject
{int i1, i2;
public:
int operator *()
{return i1+i2;}
};
void main()
{vector v(10);
for (int i=0; i,10;i++) v[i]=i;
int sv=sum(&v.Beg(),&v.End());
List L;
for (i=0;s,10;s++) L.insert(i);
int sl=sum(&L.beg(),&L.end());
cout<<…<<sl<<endl;
}
30.Елементи узагальненого програмування. Контейнерно-ітераторна модель на основі шаблонних класів та шаблонних функцій.
31. Елементи узагальненого програмування. Стандартні контейнери та стандартні функції. Алгоритми та об’єкти-ф-ції.
For-each-стандартная ф.
For-each(три параметра:1,2-діа-пазон;3.покажчик на ф.,яка ви-конує цю дію.)
1.Include<algorithm>
For_each(ar,ar+10,PrintElem); //друкуемо елементи контейне-ра.
Void PrintElem (int value)//тип елементів контейнера
Cout<<value<<endl; //чи можна її зробити універсальною.
Template<class InputIterator,class T>
Void for_each (InputIterator first,InputIterator last,void(*f),const T&,value)
{while (first!=last)
f(*first++);}
2.for_each(l.begin(),
l.end,PrintElem);
Наприклад.
Потрібновиконати певні дії,які залежать від елементів, викор. find_if-описуемо шукане значен-ня у вигляді ф.
Find_if(ar,ar+10, BiggerThan1);
Bool BiggerThan1 (int value)
{return value>1;}
3.where ar=find if (ar, ar+10,BiggerThan(n))
//так зробити не можна,тому що викликається ф.,параметр якої обчислюється в процесі її робо-ти.
Цього можна уникнути,якщо:
1.BiggerThan(n)-буде конструктор
2.перевантажити (), тоді BiggerThan повинно бути ек-земпляром кл.,введемо такий кл.
Class c
{bool (*f)(int testval);
int testval;
public: bool(*)()
operator()(int val)
c ( bool (*ff)(int v)):f(ff){}}
Якщо BiggerThan-конструктор , тоді:
Class BiggerThan
{int testvalue;
public:
BiggerThan(int n):testvalue(n) {}
Bool operator()(int val)
{return val>testval(n);}
//треба написати ф.,яка перетво-рює з типу BiggerThaa
operator bool (int)
{return *this;};} //добавимо () і отримаємо ф.
