PDA

View Full Version : معادل static_cast



baradar
چهارشنبه 02 تیر 1389, 18:23 عصر
با سلام
می خواستم معادل دستور static_cast رو
که برای c++ builder هست رو توی دلفی بدونم

vcldeveloper
چهارشنبه 02 تیر 1389, 19:20 عصر
من آشنایی چندانی با ++C ندارم، ولی به نظر میرسه که برای Compile-time type-cast استفاده میشه، برای همچین موردی، در دلفی می تونید از type-cast معمولی استفاده کنید، یعنی ابتدا نوع داده را بنویسید، سپس مقدار مربوطه را در داخل پرانتز، مثلا:

var
P : Pointer;
I : Integer;

...
I := Integer(P);این کد، مقدار P (که یک اشاره گر هست) را به Integer تبدیل نوع میکنه، و حاصل را در I ذخیره میکنه.

یک dynamic_Cast هم در ++C هست که معادلش در دلفی تقریبا میشه عملگر as:


(Sender as TButton).Visible := True;

baradar
پنج شنبه 03 تیر 1389, 09:03 صبح
با سلام
دوست عزیز جوابی که شما دادید مد نظر من نیست
نمونه کد پایین یک کد در Qt است که ما می توانیم یک شی از چندین
شی از کلاس را انتخاب کرده و خصوصیات آنرا تغییر دهیم مثلا ما یک کلاس
با وراثت از TLabel می سازیم و بعد روی فرم آنرا فرا خوانی می کنیم و حالا
با کلیک بر روی هریک می توانیم به خصوصیات آن دسترسی داشته باشیم

void Widget::mousePressEvent(QMouseEvent *ev)
{

// A کلاس
// lb شی کلاس

lb = static_cast<A*>( childAt(ev->pos()) );

if(lb){
test=true;
}
}

BORHAN TEC
پنج شنبه 03 تیر 1389, 17:53 عصر
میشه واضح تر توضیح بدین؟
آیا منظورتون اینه که در زمان اجرا بتوانید خصوصیات یک شی رو بدست بیاورید؟

baradar
پنج شنبه 03 تیر 1389, 17:54 عصر
با سلام
بله دقیقا همینو می خوام

vcldeveloper
پنج شنبه 03 تیر 1389, 17:57 عصر
دوست عزیز جوابی که شما دادید مد نظر من نیستجواب شما همون چیزی هست که در پست قبل توضیح دادم، یعنی Compile-time type-casting. اما شما نرفتید درباره اش تحقیق کنید.

شما کارکرد static_cast در ++C رو می دونید؟ اگر می دونید، در دلفی، اگر بخواید یک نوع را به نوع دیگه در زمان کامپایل type cast کنید:

NewObject := NewType(OldObject);اگر بخواید type cast را در زمان runtime انجام بدید، باید از عملگر as استفاده کنید:


NewObject := OldObject as NewTypeاگر OldObject با NewType سازگاری نوع نداشته باشه، Exception میگیرید.

اگر بخواید نوع یک شی را قبل از type-cast کردن بررسی کنید، باید از عملگر is استفاده کنید:


if OldObject is NewType then
/// Now you can type-cast the old object to NewType safely