2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
1 | ||||||
Принудительный вызов метода родителя04.07.2015, 03:54. Показов 3271. Ответов 15
Метки нет (Все метки)
0
|
04.07.2015, 03:54 | |
Ответы с готовыми решениями:
15
Вызов метода родителя Вызов метода потомка через указатель на родителя Наследование. Переопределение метода родителя Вызов из потомка конструктор родителя |
04.07.2015, 07:01 | 2 | |||||
Сообщение было отмечено rikimaru2013 как решение
Решение
1. Да - вызовы f() и this->A::f() реализованы по-разному. Вот асм выхлоп
2. Внутреняя реализация виртуального наследования не описана в стандарте (как и реализация виртуальных вызовов). Просто чаще всего компиляторы делают это так, как мы привыкли считать. В общем случае где-то будет храниться смещение, про которое ты пишешь.
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||
04.07.2015, 12:32 | 3 | |||||||||||||||
Сообщение было отмечено rikimaru2013 как решение
Решение
верно.
про виртуальное наследование: мне не удалось распарсить ваш поток сознания. если вкратце: при виртуальном наследовании, компилятор задействует динамический полиморфизм, обрабатывая вызовы функций:
как классический случай полиморфизма на языке с++ вот здесь есть наглядное и доступное описание низкоуровневой механики на русском языке: http://devdoc.web-ide.ru/index... itance.htm
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.07.2015, 13:14 | 5 |
неудивительно.
что бы распарсить такое "вкратце", нужно изначально понимать механику вирт. наследования. я оставил ссылку, там все популярно (с картинками) разъясняется.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.07.2015, 14:17 | 7 |
нет.
Не по теме: странный вопрос, учитывая ваше заявление, вы знаете, что такое "динамический полиморфизм"? есть статический, есть динамический. в основе динамического лежит механика виртуальных функций. вот эту механику он и задействует. по ссылке, что я оставил, если покапаться, можно найти статью: "виртуальные функции, низкоуровневый взгляд". подробности вы можете узнать там.
0
|
04.07.2015, 14:38 | 8 |
Просто вот это
не совсем корректно, потому я собственно и прицепился. Что меняется в вызове ф-ций при виртуальном наследовании? Ничего. При использовании виртуальных функций компилятор использует позднее связывание, если ф-ции не виртуальны - используется раннее связывание. Это поведение не зависит от типа наследования.
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
04.07.2015, 15:14 | 9 |
Чем меньше наследования и виртуальных функций в коде, тем лучше
Кому-нибудь вообще пригодилось знание механизма вызова виртуальных функций? Мне например только на давних собеседованиях, на которых этим вопросом скорее просто проверяли, а читал ли чел вообще что-нибудь по С++ В реальном коде потребность реализовывать свою VMT, понимать хитровывернутые последовательности вызова функций, обращать пристальное внимание на размер объектов, практически нигде не требуется.
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
04.07.2015, 15:31 [ТС] | 10 |
Я с вами не согласен. Если взять поваров: то они работают с ингредиентами и соусами. И лучшим является тот, кто знает как с рыбы взять филе, а еще лучшим тот кто знает чем отличается южный окунь от северного окуня (утрирую). Но разве не так?
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
04.07.2015, 16:20 | 11 |
Лучшим является тот, кто лучше готовит. Остальное - понты. Вообще вопрос относился к тому, пригодилось ли кому это знание и каким образом. Про нужность или ненужность чего-либо речи не было.
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
04.07.2015, 17:54 | 12 |
Так он вроде бы не стандартизован и от реализации зависит. Какой смысл его знать-то?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.07.2015, 18:42 | 13 |
предлагаю вам проиллюстрировать ваше виденье.
да. не путайте использование, и реализацию (технологии компиляторов) использование стандартизировано. а сама механика - unspecified.
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
04.07.2015, 19:26 | 14 |
Не, это вы нас не путайте. Тут все именно про реализацию и рассуждают.
Добавлено через 38 минут Здесь вы перепутали малость. Во-первых, при ромбовидном множественном наследовании (невиртуальном) наоборот объект-потомок содержит несколько подобъектов базового класса. А, во-вторых, именно при виртуальном ромбовидном наследовании подобъект базового класса всего один.
1
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
04.07.2015, 20:32 | 15 |
Каким образом? Какую проблему это знание помогло решить?
Ну само собой. Но вопрос не совсем ко мне - я уже говорил, что у меня только на собеседованиях смысл был.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
04.07.2015, 21:47 | 16 |
изготовление делегатов
(вызов функции/функции-члена). пачка тестов, потому что здесь и сейчас работает... зато быстро и потом, такое на собеседовании спрашивают, что бы отфильтровать программиста от обезъянки.
0
|
04.07.2015, 21:47 | |
04.07.2015, 21:47 | |
Помогаю со студенческими работами здесь
16
Вызов метода объекта внутри определения метода другого объекта(вложенные классы) Вызов метода из метода Вызов метода Вызов метода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |