- •2.Парадигми імперативного стилю.Парадигми процедур-ності.
- •3.Парадигма модульності.
- •4.Парадигма атд
- •5.Парадигма ооп.
- •7.Констуктори та деструктори.
- •8.Наслідування класів.
- •9.Обмеження доступу до базового кл.
- •10. Конструктор базового класу. Ініціалізація полів кл
- •11.”Покажчик на себе”. Статичні поля класу.
- •12.Конкретні і абстрактні типи. Віртуальні ф-ії.
- •13.Віртуальні конструктори та диструктори.Клонування.
- •14. Ефективний доступ до членів класу .Дружні ф-ії та дружні класи .
- •15.Множинне наслідування.
- •16.Віртуальні базові класи.
- •17.Перевантаження функцій.
- •18.Перевантаження унарних операцій.
- •22.Перетворення за допомогою конструкторів.
- •28.Елементи узагальненого програмування. Протеріччя з ооп. Поняття про ітератори та узагальнені алгоритми. Побудова узагальненої функції.
- •П алгоритми
- •30.Елементи узагальненого програмування. Контейнерно-ітераторна модель на основі шаблонних класів та шаблонних функцій.
- •Типи знань та методи їх представлення.
- •Парадигми імперативного стилю.Парадигми процедур-ності.
22.Перетворення за допомогою конструкторів.
Char->int; int->char;
Double->float.
Конструктор з одним обов’язко-вим параметром задає не явне перетворення параметричного типу, якому цей конструктор належить.
Class c
{public: c(d);} //c->d
class x
{public: x(int);
x(const char *, int=0);}
void f( )
{x x1=1; //x(int)
x x2=”example”; //x (const char*, int=0) -не обов’язковий
x x3,x4;
x3=2;
x4=”One more time”;}
class X
{public: X(int);}
class Y
{public: Y(X);}
v oid f(Y)
f(3); //error int->X->Y
23.Перетворення за допомогою перетворюючих ф-цій.
Перетвор.ф.–ф. член кл. Синтаксис:
Class c{operator ім”я типу( );};
c->ім”я типу.
Обгрунтування існування пере-твор. Ф.:
1.Коли треба перетворити кори-стувацький тип у базовий стан-дартний,за допомогою конструк-тора це не можливо (int (X)-некоректно)
class X
{public:
operator int( )};
2.Тоді,коли треба виконати пе-ретворення з якогось користува-цького типу Х в якийсь штучний тип Y і небажано змінювати X->Y
class X
{public:
operator int( );
operator Y( );};
Наприклад:
Class employer
{char*name;
int code;
public: operator int( );}
employer::operator int();
{return code;}
Тип повертаємого значення та список формальних параметрів перетворюючі ф. задавати не мо-жуть.
Class X
{int operator (int*( ));//error
operator int*(int);// error
operator int*( );}//Ok
3.Перетвор.ф. не може переван-тажуватися.
Class X
{public:operator int();};
void f (X a)
{int i;
X b;
i=(a<1)?a:0;
if(a ) i=b;
else i=a&&b;};
4.Перетвор.ф. можуть наслідува-тися.
Class c
{public:operator int();};
class d : public c
{. . .}
void main ( )
{d 0;
int i=0;
cout<<i;}
5.Перетвор.ф. може бути віртуа-льною.
Class c
{public:
vitual operator char ( )
{return ‘c’;}};
class d:public c
{public:operator char()
{return ‘d’};};
void f(c*pc,d*pd)
{count<<*pc<<’_’<<
*pd;
pc=new d;
cout<<*pc;}
Якщо на екрані з’явиться d,то це означає, що перетвор.ф. може бути віртуальною.
24.Області видимості.
В мові Си діє декілька просторів імен, шаблони структур, перелі-кових типів для структур..., змінні, мітки.
Struct S
{. . .}S; //Ok
Область видимості одна.В С++ один простір імен та багато об-ластей видимості для кожного простору.Стандарт ANSI-прос-тір імен,неявна область видимо-сті.
Int i;
Class c
{int i; void f ( );};
void f ( ){...=i;}; //гло-
бальна і.
Void c::f( ){...=i;};//гло-
бальна і.
Приклад:
Int i;
Class c
{int i;
friend void f( );}
void f( ){...=i;}; //гло-
бальна і.
Приклад:
Int i,j;
Class b
{public: int i,j;};
class d: public b
{int i;
void f( ){i=j};}
Правила для областей:
1.Кожній області видимості від-повідає своя таблиця імен та іде-нтифікаторів.В С++ існують таб-лиці символів: глобальна(існує в єдиному екземплярі),таблиця кл.,ф.Вони зв’язані між собою таким чином,що кожна таблиця має покажчик на батька,у глоба-льній покажчик нульовий.Таб-лиця кл. показує на беспосеред-ній базовий кл.Таблиця ф.вка-зує на таблиці кл.(якщо вона є членом),або на глобальну табли-цю.
2.Область видимості задається посльдовністю таблиць символів від даного місця в програмі і до глобальної таблиці.
Class B {/*1*/} B,GP
Void f1 ( );
{/*2*/ f1,GP
class c1
{/*3*/ c1,GP
class c2:public B
{/*4*/ c2,B, GP
friend void f2( )
{/*5*/} f2,GP
void f3(){/*6*/}} f3,c2, B,GP
void f4(){/*7*/}} f4,c1, GP
}
25.Об’ктно-орієнтовані можливості потоків. Ієрархія по-токових кл. Введення/ виве-дення потокових кл., типи кот-рих створені користувачем.
Потоки-це послідовність еле-ментів данних, спрямована від джерела до споживача.
Cout<<i<<...<<j;
Operator<<(..,..); // (ostream&,int)
Cout<<i<<f<<d;
При виводі int послідовність зна-чень перетворюється в послідо-вність символів ,а при вводі від-бувається перетворення симво-лів на деяке значення типу конк-ретних даних.
Ієрархія потокових класів
Ios<-istream<-iosteam
Ostream
Ці кл. містяться в бібліотеці <iostream.h>
Існують кл. ifstream,ofstream –визначають файл для потоку. При введені інформації з потоку:
1.Встроєні типи
istream>>(int); //для char немає float
Імена cin,cout-це екземпляри кл. istream,ostream;
Треба виклик.
Cin.get();
(cin.operator>>(i)).operator>>(j)...
class a{...};
a A;
cin>>A;
class complex
{public:
friend istream&operator (istream;complex c);};
istream& opera tor>>(istream&,com-
plex c)// обов”язково бо інакше створюється локальна змінна.
{return i>>Re>>Im;}
26.Потоки.Віртуальні операції введення та виведеня.
Потоки-це послідовність елеме-нтів данних, спрямована від джерела до споживача.
Cout<<i<<...<<j;
Operator<<(..,..); // (ostream&,int)
Cout<<i<<f<<d;
При виводі int послідовність зна-чень перетворюється в послідов-ність символів ,а при вводі від-бувається перетворення симво-лів на деяке значення типу конкретних даних.
Cin>>ptr;
A*ptr;
Ptr=new B
Перевантаженя >>.Дружність .
friend istream&operator >>(istream&,A*p)
{return p->input;}
istream&A::input(istream&)
//virtual
(return i>>0;)
class A
{public:
virtual istream & input(instream&);}
27.Форматування потоків. Ма-ніпулятори.
Стан потоку описується типом fmt flags він інкапсульований в кл. ios.Флаг (ios.h)
Skipws-пропускати пропуски.
Left,right-вирівнювати
Dec,oct,hex-система чмслення.fixed-формат виведення чисел з плавоючою точкою.
Функції:
Ios::fmtflags flags( )-считується стан потоку
Ios::fmtflags flags(fmtflags&)-встановлюється стан потоку
Flags(flags()/ ios::fixed)
Ios::setf(fmtflags&)-встановлюються ф-ції стану потоку
Setf(ios::dec/ios::left)
Краще користуватися маніпуля-торами.
Unsetf();-очистка стану потоку. Проміжний стан між флагами потоку та маніпуляторами.
1.ios::width(int)-задає ширину даних вводимих в потік.
2.ios::precision(int)-для вводу чи-сел з плавоючою крапкою по за-мовчуванню.
Звертення:
Cout.width(5);
Cout<<’(’<<123<<’)’;
Cin>>a>>b>>c;
Cout<<a<<b<<flash<<c
//flash-ф-ція,що дозволяє виво-дити в окремий файл: ios::flash() -виводить те,що в буфері.
Ostream&operator <<
(ostream&,MyType&)
ios::ostream&flash();
ostream(*f)(); //cтановимо замість MyType
ostream&operator<< (ostream&0,ostream&(*f)( ))
{return 0.(*f)();}
cout<<a<<b<<width(5)<<c; width(5)-це визов конструктора,що вертає об”єкт і через об2єкт викликає ф-цію
Виконаємо перевантаження:
ostream&operator<< (ostream&0,smanip&m)
{return m.f(m.i)}//дозволить викликати ф-цію і передати параметр.
Class smanip
{ostream&(*f)(int i);
int i;
smanip(ostream&(*f) (int i),int ii)f(ff),i(ii);}
class c
{public:
smanip&operator() (int ii);}
c width;
c::smanip&operator() (int ii)
{return smanip(les::width,ii);}