318 / 215 / 114
Регистрация: 14.05.2020
Сообщений: 890
1

Полиморфизм

07.05.2021, 20:47. Показов 1745. Ответов 6
Метки нет (Все метки)

1) Upcasting может вызвать утечки памяти ?
2) Downcasting A* a = new C(); уместен C* tmp = dynamic_cast<C*>(a);?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
class A
{
public:
 
    virtual void foo() { cout << 'a' << endl; }
};
 
class B : public A
{
    public:
    void foo() override { cout << 'b' << endl; }
};
 
class C : public B
{
    public:
    void foo() override { cout << 'c' << endl; }
    void bar() { cout << "super" << endl; }
};
 
int main()
{
    A* a = new C();
    a->foo();
    //a->bar();
        C* tmp = dynamic_cast<C*>(a)
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2021, 20:47
Ответы с готовыми решениями:

Полиморфизм.
Доброго времени суток. Помогите решить следующую задачку: Создать класс периодическое издание...

Полиморфизм
Всем доброго времени суток, Разъясните пожалуйста задание: Создать класс живущих с...

Полиморфизм
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое...

Полиморфизм в с++
Вообщем я делал программу,изначально в ней было реализовано наследование.Затем дали задание ...

6
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
07.05.2021, 20:49 2
Что значит уместен?
0
318 / 215 / 114
Регистрация: 14.05.2020
Сообщений: 890
07.05.2021, 21:02  [ТС] 3
nmcf, прочитал что downcasting - очень плохо , но если такая ситуация A* a = new C();
А потом нужно вернуть к объекту A -> C ?
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
07.05.2021, 21:44 4
Ну если тебе надо, используй.
0
Комп_Оратор)
Эксперт по математике/физике
8726 / 4473 / 600
Регистрация: 04.12.2011
Сообщений: 13,362
Записей в блоге: 16
07.05.2021, 21:49 5
Лучший ответ Сообщение было отмечено VLaDoS_2001a как решение

Решение

Цитата Сообщение от VLaDoS_2001a Посмотреть сообщение
nmcf, прочитал что downcasting - очень плохо , но если такая ситуация A* a = new C();
А потом нужно вернуть к объекту A -> C ?
VLaDoS_2001a, если указатель базового класса смотрит на потомка, то преобразование его к потомку не вреднее марганцовки. Вот если базовый смотрит таки на базовый, то приведение к потомку может в перспективе породить проблемы. Это потому, что такой указатель может обеспечить доступ к тому, чего нет физически. А фантомные боли марганцовкой не лечатся. Кроме утечек могут быть разного рода крэши.
0
16085 / 8686 / 2121
Регистрация: 30.01.2014
Сообщений: 14,972
07.05.2021, 21:49 6
Лучший ответ Сообщение было отмечено VLaDoS_2001a как решение

Решение

Цитата Сообщение от VLaDoS_2001a Посмотреть сообщение
А потом нужно вернуть к объекту A -> C ?
Можно вернуть. Если необходимо попутно проверить, что такой каст возможен, то можно использовать dynamic_cast.
Если же вы точно знаете, что там C, то можно использовать static_cast.

Цитата Сообщение от VLaDoS_2001a Посмотреть сообщение
очень плохо
Это плохо, потому что выдает плохое проектирование. Ввели иерархию, разработали интерфейс, чтобы перейти от частного к общему. А потом раз и нужно все обратно разабстрагировать. Обычно это значит что-то где-то при проектировании не дожали, т.е. архитектура вышла кривенькая. Есть конечно у этого исключения, но все-таки в большинстве случаев потребность в dynamic_cast является маркером проблем в архитектуре.

Цитата Сообщение от VLaDoS_2001a Посмотреть сообщение
утечки памяти ?
Какой-то слишком общий вопрос. Все, что угодно, может прямо или косвенно вызвать утечки памяти, если неправильно применять.
1
Комп_Оратор)
Эксперт по математике/физике
8726 / 4473 / 600
Регистрация: 04.12.2011
Сообщений: 13,362
Записей в блоге: 16
07.05.2021, 21:58 7
пардон. не то сказал) del
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2021, 21:58
Помогаю со студенческими работами здесь

Полиморфизм
Есть 4 класса Клиент(абстрактный), Вкладчик, Кредитор, Организация(производные) ...

Полиморфизм
Здравствуйте :) Я пытался читать про полиморфизм. Читал-читал, но не очень дошло. Понял, что можно...

Полиморфизм
не могу разобраться с полиморфизмом((( Вот как мне вычислить трапеции. У нее ведь три параметра, а...

Полиморфизм в C++
Предположим, что есть родительский класс Parent с виртуальным методом update с одним целочисленным...

Полиморфизм c++
Построить массив из указателей (базового типа) на объекты обоих классов. Выбрать объекты...

Полиморфизм
Помогите сделать в коде полиморфизм. Тему особо не понимаю Если что, базовый класс - &quot;Страна&quot; и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru