Войти

Показать полную графическую версию : Обьясните разницу


DYURIK
13-09-2004, 14:26
Обьясните пожалуйста разницу между static_cast & dynamic_cast. И в каких случаях надо использовать первий и второй?

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

DYURIK
15-09-2004, 11:48
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);
// ?

Crew
17-09-2004, 01:04
* 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();

К сожалению не догадался

DYURIK
17-09-2004, 10:26
Crew
Спасибо за ответ!




© OSzone.net 2001-2012