Class Rivne:public Region

{public:

Rivne():Region("Rivne"){}};

Новий конструктор похідного класу, оголошений без параметрів, передає рядок Rivne конструктору базового класу. Далі створюється об'єкт R і виводиться назва області (міста):

Rivne R;

R.Display();

Конструктори можуть мати довільні параметри. Нехай нам потрібен клас, який зберігає, крім назви області, ще й кількість населення. Можна вивести його з Region:

Class Population:public TRegion

{private:

long population;

public:

Population(long n,const char*name);

void Display(void);};

Population::Population(long n,const char*name)

{population=n;

Region(name);};

Void Population::Display(void)

{Region::Display();

cout<<"Population::"<<population<<'\n';};

Далі використовувати його можна так:

Population Kyiv(3500000,"Kyiv");

Kyiv.Display();

Похідні класи й покажчики

Якщо похідний клас derived має відкритий базовий клас base, то покажчик на derived можна присвоювати змінній типу покажчик на Base без використання явного перетворення типу. Обернене перетворення покажчика на base у покажчик на derived має бути явним. Наприклад:

class base {

//...

};

Class derived:public base

{

//...

};

derived m;

base*pb=& m; //неявне перетворення

derived*pd;

pd=(derived*)pb; //явне перетворення

Іншими словами, об'єкт похідного класу при роботі з ним через покажчик можна розглядати як об’єкт базового класу. Обернене невірно.

Якщо base є закритим базовим класом для derived, то неявне перетворення derived* на base* не виконується:

Class base

{int m1;

public:

int m2;};

Class derived:base

{//m2 - закритий тип derived

};...

derived d;

d.m2=2; //помилка

base*pb=&d; //помилка

base*pb; //ok

pb->m2=2; //ok

Ієрархія типів

Похідний клас сам може бути базовим. Наприклад, можна побудувати ієрархію класів:

class student{...};

class programmer:student{...};

class manager:student{...};

class director:manager{...};

Як бачимо з попередніх прикладів, при визначенні конструктора допускається список iнiцiалiзацiї елементів. Він відділяється двокрапкою (:) від заголовка визначення функції та містить елементи даних (базові класи), розділені комами. Для кожного елемента вказується один чи кілька параметрів, які використовуються при iнiцiалiзацiї. Розглянемо два схожих класи з конструкторами. Перший використовує список iнiцiалiзацiї даних, другий – ні.

Class XYValue

{int x,y;

public:

XYValue(int_x,int_y):x(_x),y(_y)

{}

};

Class XYData

{ int x,y;

XYData(int_x,int_y)

{x=_x;

y=_y;}};

Хоча для більшості елементів даних список iнiцiалiзацiї необов'язковий, він є єдиним методом iнiцiалiзацiї елементів у деяких випадках, наприклад, якщо елемент класу є об'єктом.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: