Наследуя функциональность существующего родительского класса (который носит название «базовый класс»), разработчик получает для дочернего класса все свойства и методы родителя. Их даже не надо объявлять и реализовывать.

Помимо этого разработчик может добавить в дочерний класс другие методы и свойства. Это иллюстрируется в продолжении упражнения.

Упражнение 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.5

case 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;

Перейти на страницу:

Похожие книги