
Сообщение от
pito211
вроде у страуструпа в книге написан примерчик типа
C++ |
1
2
3
4
| class employer
{
}
class manager : public employer |
|
а тут ничего не говорящие имена... в каком то плане действительно пример в твоей книжке неудачный
Добавлено через 2 минуты
чтобы во время выполнения определять настоящий тип объекта для которого вызывается функция и вызывать соответсвующую версию, а не версию из какого то класса предка
Тоже такое в книге есть. Теперь вот моя версия и проверенная зачем нужна виртуальная функция.
Как мы знаем фундамент на котором С++ строит свою поддержку полиморфизма это указатели на базовые классы и наследование. А конкретное средство которое реализует полиморфизм это виртуальная функция. Так вот указатель на базовый класс может указывать ток на базовые члены в производном объекте ,а на объявленные в производном не может(спецефические). И что получается обобщенный интерфейс который не имеет доступа к этому классу. Это тоже самое что прилепить руль к тачке и не иметь доступа к газу и тормозу. То есть наш обобщенный интерфейс реализует указатель на базовый класс и наследование. И все же доступа мы к тачке так и получили(к классу). И тут появляется виртуальная функция к ней доступ указатель на базовый класс имеет хоть и она является специфическим членом базового класса. И таким образов с помощью неё мы можем обращатся к специфическим членам производного класса. Она играет роль функции доступа. Таким образом мы получили доступ к нашей тачке(классу). Вот полезный пример использования виртуальной функции. Ток простой.
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| #include <iostream>
using namespace std;
class lok {
public:
int z;
virtual void pop() { cout << z; }
lok(int i) { z = i;}
};
class nn : public lok {
public:
int i;
void pop() {
i = 3;
cout << i;
}
nn(int i) : lok(i) {}
};
int main() {
lok *p;
nn k(5);
p = &k;
p -> pop();
return 0;
} |
|
Окончательный ответ виртуальная функция нужна для того чтобы получить доступ к специфическим членам производного класса посредством указателя на базовый класс.