Наследуя функциональность существующего родительского класса (который носит название «базовый класс»), разработчик получает для дочернего класса все свойства и методы родителя. Их даже не надо объявлять и реализовывать.
Помимо этого разработчик может добавить в дочерний класс другие методы и свойства. Это иллюстрируется в продолжении упражнения.
Упражнение 5.1 (продолжение)
11. В файле DogClass.h нужно дописать в конец файла объявление еще одного класса CleverDog. Этот класс имитирует поведение собаки, которая не только знает свой возраст и умеет говорить, но еще и умеет складывать и умножать целые числа. Объявление соответствующего класса приведено в листинге 5.4.
Листинг 5.4
class CleverDog: public Dog {
public:
void Add(int x, int y){
int i = x+y;
char mm[32];
wchar_t *szStr = L"";
wchar_t mstr[32];
sprintf(mm,"Результат сложения: %d\n", i);
mbstowcs(mstr, mm, 32);
szStr = mstr;
MessageBox(NULL, szStr, TEXT(«TUT»), 0);
};
void Mult(int x, int y){
int i = x*y;
char mm[32];
wchar_t *szStr = L"";
wchar_t mstr[32];
sprintf(mm,"Результат умножения: %d\n", i);
mbstowcs(mstr, mm, 32);
szStr = mstr;
MessageBox(NULL, szStr, TEXT(«TUT»), 0);
};
};
12. В файле OOP1.cpp нужно заменить объявление Dog *MyDog; на объявление переменной CleverDog *MyDog;.
13. Нужно изменить вызов конструктора при щелчке на кнопке Create, как это показано в листинге 5.5.
Листинг 5.5case IDC_BUTTON1:
MyDog = new CleverDog();
break;14. Теперь нужно запустить программу и последовательно нажать кнопки Create, Assign, Call и Destroy. Легко заметить, что поведение программы не изменилось, хотя в классе CleverDog не объявлено поле Age и метод Speak(). Они наследуются от класса Dog. Факт наследования определяется при объявлении класса:
class CleverDog: public Dog { …
15. Добавить вызов новых методов к обработчику нажатия кнопки Call, как показано в листинге 5.6. Листинг 5.6
case IDC_BUTTON4:
MyDog->Speak();
MyDog->Add(10, 20);
MyDog->Mult(6, 7);
break;