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

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

تبدیل ضمنی قابل تعریف کردن هست؟

0 امتیاز
55 نمایش

تبدیل‌های ضمنی در C++ وجود دارند مثلاً

#include <iostream>
void f(int x)
{
    ...
}

int main()
{
    long int x;
    std::cin>>x;
    f(x);
    return 0;
}

که long int رو به int تبدیل می‌کنه.
سوال من این‌جاست که می‌شه برنامه‌ای بنویسیم و براش تبدیل ضمنی رو تعریف کنیم؟ به عنوان یه برنامه‌نویس. مثلاً کلاسی به نام large int تعریف کنیم و تبدیل ضمنی int به large int براش تعریف کنیم که اگه کاربر از int هم استفاده کرد مشکلی نداشته باشه؟

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

1 پاسخ

0 امتیاز

به صورت دقیق خیر. تبدیل ضمنی تبدیلی هست که در زمان کامپایل در موردش تصمیم گرفته می‌شه.

اما می‌شه به گونه‌ای کار کرد که از تبدیل‌های ضمنی پیاده‌شده طوری استفاده بشه که برای نوع داده‌ی تعریف شده توسط ما نیز تبدیل ضمنی به وجود بیاد. مثلاً فرض کنیم یک شی داریم که با سازنده‌ای به صورت class(int) ساخته می‌شه. در این صورت class boj(12.4) تبدیل ضمنی‌ای انجام می‌ده و از سازنده‌ی کلاس استفاده می‌کنه.

یه کار بهتر هم سربارگذاری کردن operator= برای داده‌هایی هست که قراره تبدیل ضمنی براشون انجام بشه. مثلاً

const class& operator=(int x){ ... }
const class& operator=(float y){ ... }

بنابراین کد زیر انگار که داره یه تبدیل ضمنی انجام می‌ده

class obj;
obj = 2;
obj = 4.5;

برای عملگرهای دیگه هم می‌شه به همین صورت عمل کرد

class X
{
  public:
    const X& operator+(int x){ ... }
}

در این صورت کد زیر به صورت یه تبدیل عمل می‌کنه

X obj, res;
res = obj + 2;
هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده شنبه ۴ خرداد ۱۳۹۲ توسط prodo