ايران ويج

نسخه‌ی کامل: مشکل در تعریف اپراتور
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام!
این کد رو ببینین

کد:
#include <iostream>
using namespace std;

class num
{
protected:
    int value;
public:
    num (int nval = 0)
    {
        value = nval;
    }

    int getvalue()
    {
        return value;
    }

    void operator ++()
    {
        value = value + 1;
    }
    void operator -()
    {
        value = value - 1;
    }
};

int main()
{
    num n(6);
    ++n;
    //n++;
    -n;
    //n-;
    cout << n.getvalue() << endl;
    return 0;
}
با اون دوتا اپراتور که تعریف کردم مشکل دارم. همینطوری این کد کار میکنه و هیچ مشکلی نداره. یعنی اگه ++ و - قبل اسم شی بیاد.
ولی من فکر می کنم این دوتا باید بعد شی بیان. اگه ++ رو بعد شی بیارم warning میده ولی برنامه درست کار می کنه! اگه تو تعریف اپراتور کلاس توی پرانتز یه int بذارم مشکل حل میشه و warning نمیده.
کد:
    void operator ++(int)
    {
        value = value + 1;
    }
ولی برای اپراتور - اگه بیارمش جلوی شی error میده ! با اون int هم درست نمیشه !

یکی به من بگه قضیه چیه ! این چه وضعیه دیگه !!
چرا اون ++ باید قبل شی باشه ؟! درحالی که friend تعریف نشده و باید بعد اسم شی بیاد!
چرا با اون int درست میشه ؟!
- با ++ چه فرقی می کنه که همه چی عوض میشه؟! جالبه که -- مثل ++ . . . تعریف دوتایی اپراتور با یکی فرقی می کنه ! Biggrin چی شد !
023
چهارشنبه امتحان پیشرفته دارم ! 033
اون - رو هم باید -- (دو تا منفی) بزاری دیگه اگه قصد داری از شی یکی کم کنی، در غیر این صورت معنای
منفی کردن میده در نتیجه اگه - رو بخوای ببری اونور معناشو از دست میده و ....

چون ++ و -- قبل و بعد یک عملوند معنی متفاوتی دارن ولی از نظر ظاهر یکی هستن باید موقع تعریفشون
یه تفاوت ایجاد کرد که قالبا در حالتی که بصورت پسوندی استفاده میشن یه int به پارامتر اضافه می شه
البته در این حالت چون شما مقدار برگشتی رو void گزاشتین فرقی با هم ندارن

شما الان حالت پیشوندی رو تعریف کردین حالا باید حالت پسوندی رو هم جدا تعریف کنید. یعنی برای هر کدوم دو بار
کد:
void operator ++()
{
    value = value + 1;
}

void operator ++(int)
{
    value = value + 1;
}

void operator --()
{
    value = value - 1;
}

void operator --(int)
{
    value = value - 1;
}

سرم درد میکنه برای یه امتحان ولی استاد ... ، ... ، وووو، ؟؟<>#% مون خیلی بی خیاله
خيلي ممنون. نميدونستم بايد حالت پيشوندي و پسوندي رو جدا تعريف كرد!

نقل قول: اون - رو هم باید -- (دو تا منفی) بزاری دیگه اگه قصد داری از شی یکی کم کنی، در غیر این صورت معنای
منفی کردن میده در نتیجه اگه - رو بخوای ببری اونور معناشو از دست میده و ....
كاري به كدش ندارم. فقط مي خواستم ببينم فرق - با -- چيه كه بعد عملوند - Error ميداد ولي -- warning.
نقل قول: خيلي ممنون. نميدونستم بايد حالت پيشوندي و پسوندي رو جدا تعريف كرد!

چون کمی با هم متفاوت هستن، وقتی قبل قرار بگیره عملوند اول مقدارش یک واحد کم/زیاد میشه بعد در
مقدارش در یه عبارت مورد استفاده قرار میگیره
ولی اگه دستور بعدش بیاد اول مقدار فعلی عملوند در محاسبه استفاده میشه بعد یک واحد ازش کم/زیاد میشه
که شما تو کدتون این مورد رو رعایت نکردین

نقل قول: كاري به كدش ندارم. فقط مي خواستم ببينم فرق - با -- چيه كه بعد عملوند - Error ميداد ولي -- warning.

علامت - وقتی قبل یه متغییر قرار بیگره اونو منفی میکنه ولی اگه بعدش قرار بدیم به تنهایی معنا نداره
این ایراد بیشتر مربوط به گرامر زبان ++C میشه.

و در مورد -- که کارش کم کردن یک واحد از عملوندش هست و چون حالت پسوندی رو تعریف نکردین وارنینگ میده