Конструктори похідного класу
Це потенційна проблема програми 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; просмотров: 756;