1 / 1 / 0
Регистрация: 13.07.2015
Сообщений: 21
|
|||||||||||
1 | |||||||||||
Напишите шаблонную функцию, которая по двум однотипным указателям проверяет, указывают ли они на один объект20.02.2018, 15:29. Показов 5584. Ответов 15
Метки нет (Все метки)
Вот задание: Предположим, что вам даётся два указателя на объект некоторого сложного полиморфного класса, который использует множественное наследование. Оба указателя имеют один и тот же тип, но могут ссылаться на разные однотипные базы внутри одного объекта.
Напишите шаблонную функцию, которая по двум однотипным указателям проверяет, указывают ли они на один объект.
https://stepik.org/lesson/53367/step/7?unit=31461
1
|
20.02.2018, 15:29 | |
Ответы с готовыми решениями:
15
Напишите функцию, которая проверяет матрицу на симметричность. Напишите функцию, которая проверяет, отсортирован ли массив Напишите функцию, которая проверяет, отсортирован ли массив вещественных чисел Напишите, пожалуйста, функцию в Homelisp, которая проверяет принадлежность элемента к списку |
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
|
|
20.02.2018, 18:07 | 2 |
а зачем вам dynamic_cast? Если указатели равны то указывают в одно место
с другой стороны если вам надо знать конкретный тип тут надо уже RTTI юзать
2
|
Комп_Оратор)
|
||||||
20.02.2018, 22:36 | 3 | |||||
Сообщение было отмечено zombiebober как решение
Решение
zombiebober, как мне кажется тут может быть тонкость. То есть, не все равные указатели указывают на один и тот же объект. Это потому, что если указатель равен
nullptr , то он вообще никуда не указывает. Следовательно, пара таких указателей хоть и равны но не могут быть решением в ряде случаев. Возможно Ваш преподаватель имеет, это ввиду.
1
|
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
|
|
20.02.2018, 22:51 | 4 |
Может немного не по теме, но представим, что шаблонная функция принимает ссылки, а не указатели. Как будет выглядеть решение? (тут есть небольшой подвох)
0
|
Комп_Оратор)
|
||||||
20.02.2018, 23:07 | 5 | |||||
Можно ещё вот так бы заимпрувить:
0
|
Любитель чаепитий
|
|||||||||||
21.02.2018, 10:51 | 6 | ||||||||||
Сообщение было отмечено zombiebober как решение
Решение
зачем вы
dynamic_cast сюда приплели?
0
|
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
|
||||||
21.02.2018, 11:22 | 7 | |||||
GbaLog-, не работает)
По-моему, вы как-то упустили про полиморфизм, а котором говорится у ТС. В принципе, динамик каст поддерживает полиморфизм, но нужно тогда как-то знать конечный класс. Я не знаю, как это делать. TC ссылается на какой-то видео ролик про 11 и 14 стандарты, может там что-то подходящее есть.
0
|
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
|
|
21.02.2018, 11:58 | 8 |
Ygg, не работает потому что у вас две части от класса А. Ищите множественное, виртуальное наследование и читатйте теорию
0
|
Любитель чаепитий
|
||||||
21.02.2018, 12:10 | 9 | |||||
ваш пример - не работает.
он работает только в студии, но это проблемы студии. http://rextester.com/DQMCAL84184 на счёт полиморфизма и множественного наследования я действительно упустил. тогда так:
0
|
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
|
||||||
21.02.2018, 12:11 | 10 | |||||
1Вирт1, грешен, в теории слабоват)
Есть случаи, когда использование virtual в определении наследования классов требуется, а есть когда не требуется. Для полиморфного класса нужна хотя бы одна виртуальная функция. Правильнее было бы классы определить так.
0
|
Любитель чаепитий
|
||||||
21.02.2018, 12:14 | 11 | |||||
есть более простой пример, ломающий мою предыдущую функцию:
0
|
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
|
||||||
21.02.2018, 12:23 | 12 | |||||
GbaLog-, новая функция тоже не работает, она сравнивает типы, а не объекты.
0
|
GbaLog-
|
21.02.2018, 12:32
#13
|
Не по теме: ладно, я чёт туплю.
0
|
Комп_Оратор)
|
|
22.02.2018, 08:53 | 14 |
Добавлено через 1 минуту
0
|
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
|
||||||
22.02.2018, 14:34 | 15 | |||||
Выдержка из документации dynamic_cast:
Не по теме: dynamic_cast - C++
0
|
Комп_Оратор)
|
||||||
22.02.2018, 22:14 | 16 | |||||
Время не всегда решает вопрос.
*** Приведение для расширяющего преобразования в иерархии не требуется.
однотипные указатели (указатели на классы в иерархии это разнотипные) а не указатели на однотипные объекты (тут могли бы быть указатели на разные классы в иерархии указывающие на объект дочернего класса). Или это я ничего не понял?
0
|
22.02.2018, 22:14 | |
22.02.2018, 22:14 | |
Помогаю со студенческими работами здесь
16
Дубликат класса. Widget1 и widget2 указывают на один и тот же объект Как проверить, указывают ли 2 открытых хендла на один и тот же физический объект? (напр., ключ реестра) Написать функцию, которая проверяет что в строке содержится один пробел после знака препинания, и если нет - вставляет. Напишите функцию, которая будет принимать один параметр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |