Доступ до звичайних методів через вказівники

В програмі 22.1 ми розглянемо, що буває, коли базовий і похідний класи містять функції з тим самим іменем і до них звертаються за допомогою вказівників, але без використання віртуальних функцій.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

//////////

class Base

{public:

void show()

{cout<<”Base\n”;}

};

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

class Derv1:public Base

{public:

void show()

{cout<<”Derv1\n”;}

};

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

class Derv2:public Base

{public:

void show()

{cout<<”Derv2\n”;}

};

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

int main()

{clrscr();

Derv1 dv1;

Derv2 dv2;

Base* ptr;

 

ptr=&dv1;

ptr->show();

ptr=&dv2;

ptr->show();

bioskey(0);

return 0;

}

Програма 22.1

Класи Derv1 і Derv2 є спадкоємцями класу Base. В кожному з цих класів є свій метод show(). В головній функції ми створюємо об’єкти обох похідних класів, а також вказівник на об’єкт базового класу. Потім адресу об’єкту породженого класу ми заносимо у вказівник базового класу Як ми вже знаємо з вивчення Паскалю, вказівники на об’єкти породжених класів можна присвоїти змінним-вказівникам на об’єкти базових класів (але не навпаки).

Спробуємо розібратися, яка саме функція виконується в рядку

ptr->show();

функція базового чи похідного класу, тобто Base::show() чи Derv::show()? Виконавши програму, ми одержимо такий результат:

Base

Base

 

Отже, в обох випадках виконався метод базового класу. Компілятор не звертає уваги на вміст вказівника ptr, а вибирає той метод, який задовольняє тип вказівника.

 








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


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

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

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

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