28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
|
||||||
1 | ||||||
Задачка с наследованием и виртуальными функциями22.12.2012, 15:25. Показов 560. Ответов 9
Метки нет Все метки)
(
Диаграмма классов на приложенном рисунке.
0
|
|
22.12.2012, 15:25 | |
Ответы с готовыми решениями:
9
Проблема с виртуальными функциями Работа с виртуальными функциями Классы с виртуальными функциями. Class Student
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
22.12.2012, 15:40 | 2 |
0
|
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
|
|
22.12.2012, 15:46 [ТС] | 3 |
yekka, по логике функция Funk должна работать с объектом Human (да, можно передавать IHuman*, так нагляднее).
Добавлено через 1 минуту А вообще, если по программе, то funk должен получать данные объекта. Так вот, в функции Funk нужны именно данные класса Human
0
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
22.12.2012, 15:46 | 4 |
почему же она тогда в качестве аргумента принимает указатель на IClient, который не является базовым для Human?
0
|
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
|
|
22.12.2012, 15:49 [ТС] | 5 |
yekka, это я уже эксперименты проводил, пытаясь вызвать эту функцию. Да, функция принимает не то, что надо. Поэтому я и спросил как сделать чтобы вызвался метод из Human без создания нового объекта или копирования
0
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
||||||
22.12.2012, 15:52 | 6 | |||||
тогда как-то так:
http://liveworkspace.org/code/4tU3kH$15 Добавлено через 1 минуту сама функция:
1
|
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
|
|
22.12.2012, 15:55 [ТС] | 7 |
yekka, хорошая мысль. Можно даже оставить указатель на интерфейс, а при вызове функции в аргументе динамик кастом ее в производную перебивать
0
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
22.12.2012, 15:58 | 8 | |||||
1
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
22.12.2012, 15:58 | 9 |
только учти, что dynamic_cast не спасет тебя от того, что в строке client->funk(); по умолчанию будет вызываться функция Client::funk(), пока явно не укажешь, что тебе необходима именно версия Human::funk().
0
|
28 / 28 / 4
Регистрация: 24.07.2011
Сообщений: 171
|
|
22.12.2012, 16:00 [ТС] | 10 |
yekka, знаю, спасибо
0
|
22.12.2012, 16:00 | |
22.12.2012, 16:00 | |
Помогаю со студенческими работами здесь
10
Реализовать абстрактный класс pair c виртуальными арифметическими функциями Создать абстрактный базовый класс с виртуальными функциями - площадь и периметр Создать абстрактный базовый класс Point с указанными виртуальными функциями Создать абстрактный базовый класс Body (тело) с виртуальными функциями вычисления площади поверхности и объема Создать базовый класс список. Реализовать на базе списка стек и очередь с виртуальными функциями вставки и вытаскивания Создать базовый класс "список" с виртуальными функциями вставки и извлечения. Реализовать на базе списка произ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |