نمایش نتایج 1 تا 2 از 2

نام تاپیک: static_cast در تبدیلات event ها

  1. #1

    static_cast در تبدیلات event ها

    طبق جستجو هایی که من کردم مثلا در این لینک و بسیاری از لینک های دیگه، برای تبدیل یک اشاره گر از کلاس والد به یک اشاره گر از کلاس فرزند، روش dynamic_cast رو مناسب تر می دونند و استفاده از static_cast با وجوی که امکانپذیر هست ولی "ناامن" توصیف شده، پس چرا کیوت از این روش تبدیل برای event ها استفاده می کنه؟
    مگه تبدیل با dynamic_cast از نوع تبدیل run-time محسوب نمی شه و static_cast از نوع تبدیل compile-time ، پس برای event ها که روش run-time به ظاهر مناسب تر به نظر میاد؟

    bool MainWindow::eventFilter(QObject *obj, QEvent *event)
    {
    if (event->type() == QEvent::MouseButtonPress)
    {
    QMouseEvent *mouse = static_cast<QMouseEvent*>(event);
    return true;
    }
    return QMainWindow::eventFilter(obj,event);
    }




  2. #2

    نقل قول: static_cast در تبدیلات event ها

    static_cast برای تبدیل صریح به کار میره. برای مثال float به int. در عین حال می‌تونه انواع مشتق شده رو به هم تبدیل کنه. برای مثال اگر کلاسی به نام a داشته باشیم و کلاسی به نام b که از a مشتق شده. به استفاده از static_cast می‌تونیم آبجکتی از نوع b رو تبدیل به نوع a کنیم. static_cast در تبدیل رو به بالا همیشه به درستی عمل می‌کنه. اما عکس این موضوع همیشه صادق نیست. اگر شما بخواهید شیئی از نوع a رو تبدیل به نوع b کنید، static_cast واقعاً سعی می‌کنه این کار رو برای شما انجام بده، دستش درد نکنه اما ممکنه این آبجکت در واقع از نوع b نباشه. به همین دلیل ممکنه یک خطای منظقی در استفاده از اون رخ بده. در سمت مقابل dynamic_cast متحصص امور چند ریختیه. اون به صورت هوشمندانه سعی می‌کنه نوع مورد نظر رو در پیاده سازی شی پیدا کنه و اونو برگردونه، در صورتی که موفق به این کار نشه یک NULL برای شما برمیگردونه. معمولاً تا جایی که من در رفرنس‌ها دیدم گفته میشه static_cast باید اولین انتخاب شما باشه. مگر اینکه شما از ماهیت نوع آبجکت به طور قطع مطمئن نیستید. در تبدیلات event عمل cast بعد از بررسی Type صورت میگیره. پس میشه گفت ما از ماهیت آبجکت اطمینان حاصل می‌کنیم. اما در سایر موارد چند ریختی بهتره از dynamic_cast استفاده کنیم.

تاپیک های مشابه

  1. Activate Dialog events
    نوشته شده توسط Abbas Arizi در بخش C#‎‎
    پاسخ: 6
    آخرین پست: پنج شنبه 31 شهریور 1390, 17:51 عصر
  2. سوال راجب Event در Vb.net
    نوشته شده توسط zehs_sha در بخش VB.NET
    پاسخ: 0
    آخرین پست: جمعه 07 شهریور 1382, 22:41 عصر
  3. raising event
    نوشته شده توسط Farhad.B.S در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 4
    آخرین پست: یک شنبه 18 خرداد 1382, 11:09 صبح
  4. event for microsoft agent
    نوشته شده توسط afshincomputer در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 3
    آخرین پست: جمعه 05 اردیبهشت 1382, 16:52 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •