1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 424
|
|||||||||||
1 | |||||||||||
Виртуальные методы14.05.2015, 12:33. Показов 1172. Ответов 7
Метки нет (Все метки)
народ вот пример с виртуальными методами, и вывод этой программы
Descendant::function1() Descendant::function2() Descendant::function1() Ancestor::function2() Все не могу понять как это работает, объясните пожалуйста, особенно не могу понять вот эти строки где создаются объекты
0
|
14.05.2015, 12:33 | |
Ответы с готовыми решениями:
7
Виртуальные методы Виртуальные методы Виртуальные методы виртуальные методы |
68 / 67 / 59
Регистрация: 14.07.2013
Сообщений: 251
|
||||||
14.05.2015, 13:16 | 2 | |||||
Когда создаются объекты то
1
|
14.05.2015, 13:17 | 3 | |||||
Сообщение было отмечено Семан как решение
Решение
2
|
Модератор
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
|
||||||
14.05.2015, 13:22 | 4 | |||||
Семан, смотрите. Будь функция не виртуальная, компилер бы решил:
Так, вот у нас указатель на Ancestor. Раз мы вызываем метод, например
Если же функция виртуальная, компилятор ничего не решает. Это решает сама программа в рантайме, основываясь на таблице виртуальных методов самого объекта. А объект, на который указывает pointer_copy на деле не Ancestor, а Descendant
1
|
14.05.2015, 13:23 | 5 |
А она и вызывается от реального объекта, ведь память под него выделена, значит это полноценный объект. Дело здесь в другом: у нас есть два указателя разных типов(базовый и наследник), указывающих на один объект. Так вот, если вызывать невиртуальный метод через указатель на базовый класс, то вызовется метод базового класса.
1
|
Модератор
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
|
|
14.05.2015, 13:24 | 6 |
1
|
1 / 1 / 1
Регистрация: 13.03.2012
Сообщений: 424
|
|
14.05.2015, 14:05 [ТС] | 7 |
Спасибо всем большой, я уже понял все, просто еще одно не могу понять, что значит "а не от точки зрения на него"
0
|
Модератор
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
|
|
14.05.2015, 14:16 | 8 |
Семан, точка зрения в данном случае = тип указателя.
1
|
14.05.2015, 14:16 | |
14.05.2015, 14:16 | |
Помогаю со студенческими работами здесь
8
Виртуальные методы виртуальные методы Виртуальные и переопределённые методы Наследование и виртуальные методы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |