Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_pz022 (1).doc
Скачиваний:
4
Добавлен:
29.08.2019
Размер:
239.62 Кб
Скачать

7.Констуктори та деструктори.

Способи виклику конструкто-ра.

Конструктор-ф.-член кл. яка не повертає ніякого значення ,ім’я конструктора співпадає з іменем класу,при чому пам’ять не виділяє,а записує значення в виділену пам'ять.Він відповідає за створення екземпляру.Якщо в кл. Не має жодного конструкто-ра, то використовується неявний стандартний конструктор, який має прототип С().

Способи виклика конструктора

1.Автоматичний виклик

class C

{}

C c;//виклик конструктора

2.Ініціалізація

MyType x=value;

Викликається конструктор з параметром, який стоїть в правій частині

Class Complex{…};

Complex a;

Complex b=1;

Complex c=Complex(1,2);

3.Конструктор для динамічних об’єктів:

Class Vector

{ int *V;int size;

public:

Vector( )

{size =DEFAULTSIZE;

V=new int [size];}

Vector( int sz )

{size = sz;

V=new int [size];}

Vector (Vector Vect)

{size = Vect.size;

V=new intr[size];

for(int i=0;i<size;i++)

V[i]=Vect.V[i];

Конструювання масивів.

Class C

{…};

void f( )

{ C Carr[10];//10 разів виклика-ти конструктор

C*Carr ;

Vector M[10];}

Деструктор це ф. член кл. яка не має параметрів ,не повертає нія-кого значення ,її ім'я –ім-я кл. з символом "~"

class C

{ public:

~C( );}

Деструктор викається для виrонання певних операцій при знищенні екземпляра.П-д:

Void f( )

{c C;

…..

//~C }

class Vector

{ int *V ;int size;

~Vector( )

{ delete V[size];}};

8.Наслідування класів.

А - базовий клас

С-похідний клас

Д

class A

{ int i;

public:

void Af( ) ;};

class B :public A

{ int j;

public:

void Bf ( ); };

Опишемо

Void f( )

{ B b1;

b1.j=0;

b1.i=0;// змінна і через наслідування доступна

b1.Af( );}

при наслідуванні до екземпляру пам"яті В додається підекземрляр пам"яті А.При конструюванні В спочатку відбувається виділення пам"яті для базового класу А ,а потім довиділення В. Спочатку викликається конструктор базового класу ,а потім конструктор даного типу.Причому у тій послідовності в якій ієрархії ці класи знаходяться

П-д:нехай  об"єкти двох типів: службовці і менеджери

class employee //базовий клас

{ char*name;

public:

……};

class manager:public

employer //похідний клас

{ int level;

public:

…..};

void f( )

{ employer *x;

manager *y;

employer E;

x=&E;

x name;

//другий варіант

x=new employee;

x = y ; //ok!

y = x ; //err!

ylevel=0;//ok!

xlevel=0//err!

Кожний manager є

employer ,але не кожен employer є manager .

Наслідування-принцип при якому знання про більш загальну категорію можна використати в знаннях про більш вузьку категорію.Базовий клас-клас який розпространяє свої властивості(родитель);

похідний клас -подклас(ребенок);

абстрактний клас-клас який не має

екземпляра.

9.Обмеження доступу до базового кл.

class B: privat A{…};

protected A{…};

public A{…};

Приватний доступ до базового кл. -тільки члени класа А та його друзі можуть отримати доступ до полів базового кл.

Захищений доступ до базового кл.-тільки члени похідного кл. його друзі та потомки можуть отримати доступ до полів базового кл.

Публічний доступ до базового кл.-будь хто може отримати доступ до полів базового кл.

class X{public:int a};

class A public X{…};

class B protected X{..};

class C privat X{…};

class D public B {…};

void f(X*px,A*pa,B*pb,

C*pc)

{px = pa ; // ok!

pa  a=10; //ok!

px = pb ; //err! так як ф-ія f не є члуном похідного класу

pb a =10 ;//err!

px = pc ; //err! так як ф-ія f повинна бути строго членом класа С

pca = 10 ;//err!}

Інший варіант:

void C::f(X*px,A*pa, B*pb,C*pc)

{ px = pa ; // ok!

pa a=10 ; //ok!

px =pb ; //err!

pba=10 ; //err!

px=pc ; // ok!

pca=10; //ok1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]