برای تبدیل داده دو نوع کلی وجود داره. یکی تبدیل از انواعی که منجر به خطاهای حاد نمیشه (fatal erroe
نمیده). یکی تبدیلی که ممکنه موجب همچین اخطاری بشه.
مثلاً تبدیل float به int میتونه از نظر منطقی خطای تقسیم بر صفر رو ایجاد کنه ولی این یک خطای منطقی هست که در حالت عادی هم در برنامه اتفاق میافته. ولی تبدیل int به int *
از این نظر خطرناکه که ممکنه یه مکان نامناسب از حافظه رو در اختیار برنامه قرار بده که نباید! حالت خاص اون وقتی که 0 رو به int*
تبدیل کنیم.
تبدیل بدون چنین خطاهایی مطمئن محسوب میشه. با dynamic_cast
میشه اشارهگر یا ارجاع به والد و فرزند رو با هم جابجا کرد. مثال:
class Base { };
class Derived: public Base { };
Base b; Base* pb;
Derived d; Derived* pd;
pb = dynamic_cast<Base*>(&d);
pd = dynamic_cast<Derived*>(&b);
این تکنیک مربوط به RTTI میشه که قسمتی از تواناییهای شیگرایی در C++
محسوب میشه.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)