اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

تبدیل مطمئن داده

+1 امتیاز
194 نمایش

یه عملگر هست به شکل dynamic_cast(variable) که توی توضیحاتش نوشته برای تبدیل امن و مطمئن به کار برده می‌شه. دو تا نکته‌ی مهم برای من اینه که اولاً من این تبدیل رو هیچ جایی ندیدم استفاده بشه. چه کامپایلرهایی از این پشتیبانی می‌کنن؟ دو دوم این که چطوری و کجاها می‌شه ازش استفاده کرد؟

در ++C زبانی بسیار کوچک‌تر و پاکیزه‌تر در تلاش برای خروج است. (Bjarne Stroustrup)
پرسیده شده دوشنبه ۲۹ آبان ۱۳۹۱ در C++ توسط برنامه‌نویس  
بازتگ شده پنجشنبه ۲۲ فروردین ۱۳۹۲ توسط admin

1 پاسخ

0 امتیاز
 
بهترین پاسخ

برای تبدیل داده دو نوع کلی وجود داره. یکی تبدیل از انواعی که منجر به خطاهای حاد نمی‌شه (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++ محسوب می‌شه.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده پنجشنبه ۸ فروردین ۱۳۹۲ توسط prodo  
انتخاب شده شنبه ۳۱ فروردین ۱۳۹۲ توسط admin