Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Обьясните разницу

Ответить
Настройки темы
Обьясните разницу

Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


Обьясните пожалуйста разницу между static_cast & dynamic_cast. И в каких случаях надо использовать первий и второй?

Отправлено: 14:26, 13-09-2004

 

Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


При приведении полиморфных классов одной и той же иерархии всегда используйте dynamic_cast.
В других случаях необходимо применять операторы static_cast() или reinterpret_cast().
Пока компилятор не выдает никаких ошибок, используйте static_cast().
Джесс Либерти "C++. Энциклопедия пользователя"

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 00:09, 14-09-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


Crew
Давайте разберемся:
Код: Выделить весь код
class Base
{
public:
   Base() {};
};

class A : public Base
{
public:
   A() {};
};

Base* pBase = new A();
// Сдесь надо использовать
A* pA = dynamic_cast<A*>(pBase);
// или
A* pA = static_cast<A*>(pBase);
// ?

Отправлено: 11:48, 15-09-2004 | #3


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
 
 * A* pA_1 = new A(); 
 * Base *pBase_1 = dynamic_cast<Base*>(pA_1); 
 * Base *pBase_2 = static_cast<Base*>(pA_1); 
//оба варианта работают, dynamic_cast работает, потому что 
//Base выше по иерархии 
 * Base* pBase_3 = new Base(); 
 * A* pA_2 = dynamic_cast<A*>(pBase_3); 
 * A* pA_3 = static_cast<A*>(pBase_3); 
//работает только static_cast, 
//считается небезопасным, потому что теперь можно 
//вызвать метод, которого нет в Base, а dynamic_cast сразу возмущается по этому поводу
зачем нужно
Код: Выделить весь код
 
Base* pBase = new A();
К сожалению не догадался

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 01:04, 17-09-2004 | #4


Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


Crew
Спасибо за ответ!

Отправлено: 10:26, 17-09-2004 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Обьясните разницу

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Объясните разницу между gprs и wap rivera Мобильные ОС, смартфоны и планшеты 2 30-11-2009 22:21
[решено] Объясните разницу. systeman Процесcоры 9 04-11-2009 19:10
Кто-нибудь объясните разницу Guest Общий по Linux 11 12-04-2004 19:25
обьясните люди ! Guest Хочу все знать 5 13-01-2004 22:02
Подскажите разницу между Siemens SL 42/25/45i SWAP Мобильные ОС, смартфоны и планшеты 19 19-05-2003 11:59




 
Переход