
- •1. Типи знань і методи їх представлення.
- •2. Парадигми імперативного стилю. Підтримка в мовах програмування. Парадигма процедурності.
- •3. Парадигма модульности (локализации).
- •4. Парадигма атд.
- •5. Парадигма ооп.
- •7. Ефективний доступ до членів класу. Дружні функції та дружні класи.
- •8. Конструкторы и деструкторы.
- •9. Инициализация полей класса. Статические члены класса.
- •10. Наследование классов. Конструкторы базового класса.
- •11. Обмеження доступу до базового класу.
- •12. Множинне наслідування.
- •13. Виртуальные базовые классы.
- •14. Конкретные и абстрактные типы. Виртуальные функции.
- •15. Виртуальные деструкторы и «витруальные» конструкторы. Клонирование.
- •16. Посилання. Ініціалізація, використання, порівняння з покажчиками.
- •17. Перевантаження функцій.
- •18. Перевантаження унарних операцій.
- •19. Перевантаження бінарних операцій.
- •20. Параметризація типів за допомогою шаблонів.
- •21. Параметризація функцій за допомогою шаблонів.
- •22. Перетворення за допомогою конструкторів. Обмеження.
- •23. Перетворення за допомогою перетворюючих функцій.
- •24. Область видимости.
- •25. Пространства имен. Директива using.
- •27. Потоки. Віртуальні операції введення та виведення.
- •29. Узагальнені алгоритми та бібліотека стандартних шаблонів. Ітератори.
19. Перевантаження бінарних операцій.
Бинарный оператор можно определить либо в виде нестатической функции-члена с одним аргументом, либо в виде функции-не-члена с 2 аргументами. Для любого @ выражение aa@bb интерпретируется либо как aa.operator@(bb) либо operator@(aa,bb). Если определены обе функции, для выяснения того, какую из них использовать, применяется механизм разрешения перегрузки. Например: class X{public: void operator+(int); X(int);}; void operator+ (X,X); void operator+(X,double); void f(X,a) {a+1; 1+a; a+1.0};
20. Параметризація типів за допомогою шаблонів.
Шаблон явл мехиназмом параметризации определения класса или функции произвольным типом. Код, реализующий шаблон, идентичен для всех типов параметров, также как и большая часть кода, реализующая шаблон.
Шаблони класів мають вигляд template <список парам>
class ім”я класу{}
template<class T>
class vector {T*v; public: vector (int size);
t& operetor [](int index);
vector<int> v1(10);
vector <complax >v2(30);
typedef vector > cv;
cv v3(40);
v1[1]=7; v2[3]=7;\\?ok; v2[3]=v3[4]\\ok?.
Шабл.типи еквівал., якщо
template<classsT,int i>;
class B {T v[i]}
B<char,40*3> b1;
B<int,20> b2;
B<char,20> b3.
21. Параметризація функцій за допомогою шаблонів.
вона здійснюється так.Оголошення ф-іі
template<список парам>
template<class T>
void sort(vectoe<T>& int n)
void f(vector complax,&cv vector<int>&iv)
{sort(cv)\\sort(vector< complax>&
sort(iv)\\sort(vector<int>&
Це приклад неявноі параметриз.
Розглянемо сумісність шабл.тп нешабл. ф-ій.template <class T>
T max(T &x,T&y){retutr x>y?x:y}
це шабл.ф-я.
void f(int a,b,char c,d) {int l, char f; l=max(a,b); \\max(int&,int&);
f=max(c,d) //max(char&,char&);
l=max(a,c)//er}.
Правила: -якщо визов ф-іі повністю співпадає з іі прототипом то відбів. генералізація (візов), -пошук шабл.ф-іі яку можно утотожніти з визовом ф-іі, -ротиться спроба шляхом неявних перетвор параметрів у вихзові ф-іі привести їх типи до нешабл ф-ій.
22. Перетворення за допомогою конструкторів. Обмеження.
Коли треба перетворити тип користувача на базовий за допомогою кон-ра це можливо х->int
class X{public:operator int()};Для цього зробимо клас з ім”ям як тип який перетворюємо.
class x {public: c(d)};
class x{public : x(int); x(const char *int=0)};
voif f() {x x1=1\\визов кон-ра x(int) х1=х(1)
х х2=”рпр”\\ визов кон-ра x(const char *);
void g(x) {}
g(3)\\ перетвор з типу х
class x{public: x(int)}\\int->x;
class x{public: y(x)}\\y->x
void h(y);
h(3)\\er
23. Перетворення за допомогою перетворюючих функцій.
Коли треба перетворити тип користувача на базовий за допомогою кон-ра це можливо х->int
class X{public:operator int()};.Коли треба використ перетворення з типа користувача Х до штучного типу У.
class X{public:operator int();operator Y();}
class employee {char * name; int code; public: operator int ();}
employee::operator int(){ return code}
тип повертаємого зн-ня та
список параметрів задавати неможна для перетвор-і. ф-іі.
class X {int * operator(int*());\\Er}
operator int *(int);\\Er
operator int*()\\Ok
Перетворюф-ю неможна перевантажити..Ці ф-іі можна наслідувати. н-д
clsass c {public: operator int();}
class d:public c{};
void mane(){ d D; int i=D; cout<<i}.
Приклад показуювий чи може перетвор ф-я бути вірт.
с<-d (наслідуємі перетвор ф-іі)
class c{public: virtual operator char(){return ‘i’}};
class d:public c{public: operator char(){return ‘d’}}
voif f(c *pc,d * pd) {cout<*pc<<’ ‘<<*pd;
pc=new d;
cout<*pc;}