- •2.Парадигми імперативного стилю.Парадигми процедур-ності.
- •3.Парадигма модульності.
- •4.Парадигма атд
- •5.Парадигма ооп.
- •7.Констуктори та деструктори.
- •8.Наслідування класів.
- •9.Обмеження доступу до базового кл.
- •10. Конструктор базового класу. Ініціалізація полів кл
- •11.”Покажчик на себе”. Статичні поля класу.
- •12.Конкретні і абстрактні типи. Віртуальні ф-ії.
- •13.Віртуальні конструктори та диструктори.Клонування.
- •14. Ефективний доступ до членів класу .Дружні ф-ії та дружні класи .
- •15.Множинне наслідування.
- •16.Віртуальні базові класи.
- •17.Перевантаження функцій.
- •18.Перевантаження унарних операцій.
- •22.Перетворення за допомогою конструкторів.
- •28.Елементи узагальненого програмування. Протеріччя з ооп. Поняття про ітератори та узагальнені алгоритми. Побудова узагальненої функції.
- •П алгоритми
- •30.Елементи узагальненого програмування. Контейнерно-ітераторна модель на основі шаблонних класів та шаблонних функцій.
- •Типи знань та методи їх представлення.
- •Парадигми імперативного стилю.Парадигми процедур-ності.
10. Конструктор базового класу. Ініціалізація полів кл
class employer {…};
class manager: public
employer {…};
спочатку працює конструктор базового типу
int level
{public:
manager(char * n, int a, int l )
{ level=l;};}
Інший приклад
class employer {..};
class manager : public employer
{int level ;
public:
manager(char * n, int a, int l): employer (n,n)
{ level = l;};};
Ініціалізація:
Complex ( )
{Re=0;Im=0;}
complex( ):Re(0),Im(0);
class C
{int & i;};
11.”Покажчик на себе”. Статичні поля класу.
This зарезервований за показжчиком на поточний еземпляр класу
Class A
{int x;
public:
void f(int)
}
class B
{public:
void g(int)
}
void A::f(int i)
{//this this->x=0
x=i;//this->x=1;
}
void B::g(int j)
{//this
}
void main()
{A a;
a.f(1);
}
this використовується явно в динамічних списках.
Статичні члени класу.
class C
{int a;};
c C1,C2;
int common;
class C
{ public:
void f( )
{ (common=2;}};
Недоліки:
1)програміст може забути ініціалізувати таку змінну; 2)спільна для екземплярів кл. змінна common є спільною і для небажаних доступів.
Через це є статичні дані кл.,які виділяються специфікатором static
class taskList
//одне звено у цьому списку
…
public:
static taskList *chain ;};
статичні властивості не дуб-лю-ються вони є спільними для всіх
taskList* taskList :: chain = 0;
taskList TL;
TL.info = ptr ;
Конструктор не виділяє пам’ять до статичних змінних,але він може робити ініціалізацію по відношенню до статичної змін-ної:
Void f( )
{ int i;
static c C ;//(1)екземпляр кл. С-статична змінна
if ( i )
{static c C ;}}//(2)
при вході в блок f ініціалізація С буде один єдиний раз ,тобто
(2) відбувається,а(1)ні
class C
{ public:
static void f( ) ; };//ця ф-ія не буде приймати участь
--------- 13 ---------------------
//tmp->right=right; //тількипереприсвоїли покажчик
if (left) tmp->left->copy(left)
if(right) tmp->right->copy(right)
return tmp;};
------- 13 -------------------------
12.Конкретні і абстрактні типи. Віртуальні ф-ії.
П-д:
Class stack
{char *s;
int top;
int stacksize;
public:
char pop( );
void push(char);
stack( );
stfck(int size);}
char stack :: pop( )
{ return s[top--];}
П-д абстрактної реалізації стека:
Void f(stack & stk )
{stk.push ('C');
if (stk pop( )!='C'_
error(…); }
Інший приклад більш абстрактного використаня:
class stack
{ public:
virtual void push (char)=0;
virtual char pop ( )=0;};
Абстрактний класс дозволяє не перекомпільовувати вихідні тексти програм
які користуються цим типом при зміні реалізації.Абстрактний тип вимагає того ,щоб нижче в програмі він був довизначений в якомусь похідному класі.Для абстрактого класу не можна описувати екземпляри.
П-д:
Void main ( )
{array_stack as(100);
f(as);
……}
class array_stack :
public stack
{char*V;
int top;int sfacksize;
public:
//конструктори
char pop( );
void public char;};
Описувач virtual можна не ставити так як абстрактний тип передбачає це.
Підсумок:абстрактні класи дозволяють досягти незалежності інтерфейсу від реалізіції.
Віртуальні функції.
П-д:
Class A
{ public:
void f( )
{ cout <<"клас А"}};
Class B:public A
{ public:
void f( )
{ cout <<"клас B"}};
void g( );
{ A a ; B b ; a.f( );b.f( );
g1(&a); g1(&b);}
void g1(A*pa)
{ paf( ); }
З кожнисм класом які мають віртіальні ф-ії пов"язується таблиця.(vtbl).З кожним екземпляром класу пов"язується один покажчик
Покажчик на екземпляр
екземпляр покажчик на vtbl покажчик на ф-ію.
1)ефективність використання з точки зору обчислювальної складності;
2) ефективність використання з точки зору швидкості виконання ;
3) розподілу пам"яті.