Конструктори похідного класу

Це потенційна проблема програми 17.1. Що буде, якщо ми захочемо ініціалізувати значенням об’єкт класу CountOn? Чи зможемо ми скористатися конструктором базисного класу з одним аргументом? Відповідь буде заперечною. Для похідного класу слід написати власний конструктор. Зробимо це в програмі 17.2

#include <iostream.h>

#include <conio.h>

#include <bios.h>

class Counter

{protected:

unsigned int count;

public:

Counter():count(0) //конструктор

{ }

Counter (int c):count(с)

{ }

 

unsigned int get_count()

{return count;}

 

Counter operator++ ()

{return Counter(++count);

}

};

 

class CountOn:public Counter //похідний клас

{public:

CountOn():Counter()

{ }

CountOn(int c):Counter(с)

{ }

 

CountOn operator—()

{return CountOn(--count);

}

};

////////////////////

int main()

{

clrscr();

CountOn c1;

CountOn c2(100);

cout <<”\nc1=”<<c1.get_count();

cout <<”\nc2=”<<c2.get_count();

++c1;++c1;++c1;

cout <<”\nc1=”<<c1.get_count();

--c2;--c2;

cout <<”\nc1=”<<c1.get_count();

CountOn c3=--c2;

cout<<”\nc3=”<<c3.get_count();

cout <<endl;

bioskey(0);

return 0;

}

Програма 17.2

Програма використовує два нові конструктори класу CountOn. Це конструктор без аргументів

CountOn():Counter()

{ }

і конструктор з одним аргументом

CountOn(int c):Counter(с)

{ }

 

В першому конструкторі використана нова для нас можливість: ім’я функції після двокрапки. Вона використовується для виклику конструктора базового класу. Якщо ми запишемо в функції main()

 

CountOn c1;

то компілятор створить об’єкт класу CountOn і викличе конструктор класу CountOn для його ініціалізації. Конструктор в свою чергу викличе конструктор базового класу, який виконає необхідні дії.

Виклик конструктора в списку ініціалізації може бути зайвим, але має сенс. Ми хочемо проініціалізувати поле незалежно від того, чи належить воно базовому, чи похідному класу, і перед виконанням будь-якого оператора програми спершу виконаються операції конструктора.

Конструктор

CountOn(int c):Counter(с)

{ }

з одним аргументом викликає відповідний конструктор з одним аргументом з базового класу.

 








Дата добавления: 2015-08-26; просмотров: 714;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.