Показать полную графическую версию : Обьясните разницу
Обьясните пожалуйста разницу между static_cast & dynamic_cast. И в каких случаях надо использовать первий и второй?
При приведении полиморфных классов одной и той же иерархии всегда используйте dynamic_cast.
В других случаях необходимо применять операторы static_cast() или reinterpret_cast().
Пока компилятор не выдает никаких ошибок, используйте static_cast().
Джесс Либерти "C++. Энциклопедия пользователя"
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);
// ?
* 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();
К сожалению не догадался
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.