Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Обьясните разницу (http://forum.oszone.net/showthread.php?t=29460)

DYURIK 13-09-2004 14:26 203993

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

Crew 14-09-2004 00:09 203994

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

DYURIK 15-09-2004 11:48 203995

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 203996

Код:


 * 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 203997

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


Время: 09:01.

Время: 09:01.
© OSzone.net 2001-