117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
||||||
1 | ||||||
Приведение производного типа к предку02.11.2015, 15:32. Показов 2268. Ответов 18
Метки нет Все метки)
(
Есть класс-обертка Inherit, есть класс Base:
Есть некоторые функции, которые принимают объект Base, есть другие, которые принимают потомка. Но как я понял, нужно перегружать функции для обоих классов. Вот и вопрос: можно ли обойтись единственными реализациями функций, чтобы они работали с объектами как базового, так и производного класса, но только без указателей?
0
|
|
02.11.2015, 15:32 | |
Ответы с готовыми решениями:
18
Приведение переменной типа object к переменной производного типа в приложенном коде Передача типа из производного класса в родительский Приведение типа без имени типа? Ссылается ли на экземпляр производного класса переменная родительского типа в приведенном коде |
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
02.11.2015, 16:10 [ТС] | 3 |
castaway, хм, про шаблоны забыл упомянуть в конце. Впрочем, можно и ими обойтись.
В общем, спокойно кастовать не выйдет?
0
|
7527 / 6392 / 2914
Регистрация: 14.04.2014
Сообщений: 27,850
|
|
02.11.2015, 16:14 | 4 |
Это попытка сэкономить, что ли? Если у тебя классы в иерархии не различаются, зачем ты её придумал?
Если функция работает только с полями, которые есть у предка, то используй параметр базового класса, он же совместим с потомками (ссылку, не указатель).
0
|
![]() |
||||||
02.11.2015, 16:17 | 5 | |||||
![]() Решение
Хотя подожди...
Можно использовать ссылку, если тебя не устраивает указатель.
1
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|
02.11.2015, 16:22 | 6 |
и в чем понт?
указатель какбэ и дает использовать полиморфизм. потому что указатель всегда одинаковый - 4/8байт если не работать с указателями, то не работают виртуальные функции, интерфейсы, автоматические преобразования потомка к предку. Совет: поменять архитектуру
0
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
02.11.2015, 16:28 [ТС] | 7 |
castaway, великолепно, то, что нужно. Благодарю.
Добавлено через 1 минуту Просто интересно. Нельзя поинтересоваться? Добавлено через 2 минуты Мне нужен доступ к полю наследника, поэтому я ожидал что-то вроде передачи ссылки и кастования объекта базового класса до наследника с целью получить доступ. Здесь мне кажется, просто так получить к нему доступ не выйдет, так что кастовать-таки придется. В общем, проверю. Сейчас просто другим был занят, проверить эту теорию просто времени не было.
0
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|
02.11.2015, 16:30 | 8 |
а, ок. Вот какраз эти размышления и привели к указателям когдато)
Добавлено через 1 минуту сделай виртуальный метод getField(); доступ ко всем членам класса надо делать через методы, чтобы класс "знал" когда его данные читают, смекаешь?
0
|
![]() 8724 / 4304 / 958
Регистрация: 15.11.2014
Сообщений: 9,751
|
|
02.11.2015, 20:03 | 10 |
можно. и даже нужно.
используйте ссылку на базовый класс. в том, что работа с полиморфом предполагает наличие валидного живого объекта. а значит нет ни одной причины для того, что бы использовать указатели там, где безопаснее и лучше по смыслу подходят ссылки. все там работает.
0
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
||||||
02.11.2015, 20:14 | 11 | |||||
сылка не константный указатель, не?
Добавлено через 4 минуты
0
|
castaway
|
02.11.2015, 20:14
#12
|
0
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
||||||
02.11.2015, 20:20 | 13 | |||||
ну и да
Добавлено через 1 минуту
0
|
castaway
|
02.11.2015, 20:34
#14
|
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
02.11.2015, 20:42 | 15 |
Арифметика ссылок?
![]()
0
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|
02.11.2015, 20:56 | 16 |
Ну нет.
A &a == const A*a; нельзя инкремент. Нельзя неинициализированный создать.
0
|
![]() 8724 / 4304 / 958
Регистрация: 15.11.2014
Сообщений: 9,751
|
|||||||||||
02.11.2015, 21:14 | 18 | ||||||||||
не.
ну заблуждайтесь дальше, чоу.
0
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|
03.11.2015, 14:42 | 19 |
я хотел бы сказать, что это опечатка, но черт побери я действительно думал, что пишется так.
константный указатель Base * const ptr;
0
|
03.11.2015, 14:42 | |
Помогаю со студенческими работами здесь
19
приведение типа Приведение типа Приведение типа Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |