DYURIK |
13-09-2004 14:26 203993 |
Обьясните пожалуйста разницу между static_cast & dynamic_cast. И в каких случаях надо использовать первий и второй?
|
При приведении полиморфных классов одной и той же иерархии всегда используйте 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);
// ?
|
Код:
* 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.
© OSzone.net 2001-