PDA

View Full Version : تبدیل انواع



Abbas Arizi
شنبه 01 آذر 1382, 21:25 عصر
با سلام.
توی کتابخانه های مربوط به ++VC چه کلاسهایی جهت تبدیل انواع مختلف به یکدیگر وجود دارد.
اصولا روش معمول برای این کار در زبان ++‍C چیست؟
با تشکر.

Inprise
یک شنبه 02 آذر 1382, 15:23 عصر
اصولا روش معمول برای این کار در زبان ++‍C چیست؟

تبدیل انواع در سی پلاس پلاس تفاوت زیادی نسبت به سی دارد .

الف) reinterpret_cast : تبدیل انواع اشاره گر به هم یا تبدیل اشاره گر به انواع مقدماتی و بالعکس .


class A {};
class B {};
A * a = new A;
B * b = reinterpret_cast<B*>(a);

ب) static_cast : تبدیل اشاره گر از نوع کلاس در یک خانواده کلاس


class Base {};
class Derived: public Base {};
Base * a = new Base;
Derived * b = static_cast<Derived*>(a);

استاتیک کست کاربرد گسترده ای هم در تبدیل انواع مقدماتی داره :


double d=3.14159265;
int i = static_cast<int>(d);

ج) dynamic_cast : برای تبدیل اشاره گر های اشیاء به یکدیگر "فقط" کاربرد دارد اما با دو تفاوت . اول اینکه این تبدیل بر خلاف انواع بالا زمان کامپایل صورت نمیگیرد ! بلکه زمان اجرای کد این اتفاق می افتد ( یعنی تا زمانی که این تبدیل انجام نشده برنامه با نوع مفعول "تبدیل شده" برخورد نمیکنه و این باز یعنی اگر اون قسمت از کد اجرا نشه هیچ تبدیلی صورت نمیگیره و هیچ حافظه خاصی کمتر یا بیشتر تخصیص داده نمیشه یا آزاد نمیشه ) و دوم اینکه با قوانین خاصی قبل از تبدیل بررسی میشه که آیا این تبدیل میتونه یک شی کامل و صحیح رو برگردونه یا خیر .


class Base { virtual dummy(){}; };
class Derived : public Base { };

Base* b1 = new Derived;
Base* b2 = new Base;
Derived d1 = dynamic_cast<Derived&*>(b1); // succeeds
Derived d2 = dynamic_cast<Derived&*>(b2); // fails: exception thrown


از طریق اپراتور TypeId هم میتونید در زمان اجرا نوع یک مورد اشاره یک اشاره گر را پیدا کنید .

موفق باشید

Abbas Arizi
یک شنبه 02 آذر 1382, 16:11 عصر
البته من منظورم این نوع تبدیل نبود. منظورم یه چیزی شبیه اون چه که توی زبانهایی مثل VB و #C و ... انجام میشه بود. فرضا من اگه بخوام یک متغیر int رو ببرم توی کلاس CString با استفاده از این دستورات امکان نداره یا یک شیی CTime به CString. شاید هم داره و من از عهده اش بر نیومدم. بنابراین اگه امکان داره یه مقدار بیشتر در خصوص این موارد خاص توضیح بدید.
با تشکر.

Inprise
یک شنبه 02 آذر 1382, 17:29 عصر
یک متغیر int رو ببرم توی کلاس CString

مثلا" اینطوری :


CString Str;

int i=15;

Str.Format("Fifteen : %d",i);

حالا Str محتوی Fifteen : 15 خواهد بود .


یک شیی CTime به CString

از تابع Format کلاس CTime استفاده کن . خروجی ش CString است .

اینها دیگه اسمش تبدیل نوع نیست البته :roll:

Abbas Arizi
یک شنبه 02 آذر 1382, 17:56 عصر
ممنون.

Pars Giga
یک شنبه 15 خرداد 1384, 13:26 عصر
:strange: :strange:

محمد میرمصطفی
یک شنبه 15 خرداد 1384, 23:42 عصر
دوتا مخ (مدیر) به هم بیافتن و با هم بالای فوق لبسانس حرف بزنن ما فقط باید وایسیم هاج و واج :strange: تماشا کنیم.