Class Next
{
public:
char* string;
Next(char * cp){string = cp;}
};
class Last:public Next
{
int val; char name[30];
public:
Last(int d);
};
// виклик базового класу з нульовою вказівкою
Last::Last(int d):Next((char *) 0)
{
sprintf(name, "%d", d);
//ініціалізуєтся змінна базового класу
string = name;
val = d;
}
При створенні екземпляра класу викликається його конструктор. Якщо клас є похідним, то повинен бути викликаний конструктор базового класу. Спочатку будується базовий клас, потім похідний.
Якщо базовий клас є похідним, то процес повторюється доти, поки не буде досягнутий кореневий клас. Дерево спадкування, наведене на рис. 3.1, ілюструє це:
Рис. 3.1 Дерево спадкування
class First {...};
class Second: public First {... };
class: Third: public Second {... };
При створенні екземпляра класу Third конструктори викликаються в такому порядку:
First:: First();
Second:: Second();
Third:: Third();
На відміну від конструкторів деструктори викликаються в зворотньму порядку:
Third:: ~Third();
Second:: ~Second();
First:: ~First();
У С++ класи розробляються для досягнення визначених цілей. Частіше усього програміст починає з нечітко обкресленої ідеї, що поступово в міру дозрівання проекту поповнюється деталями. Іноді справа закінчується двома класами, схожими один на одного. Щоб не дублювати коди в класах варто розбити їх на дві частини, помістивши загальну в батьківський клас, а ту, що відрізняється помістити в похідний.
Приклад двох класів, що мають загальні параметри:
#include <iostream>
using namespace std;
Дата добавления: 2014-12-26; просмотров: 688;