امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در تعریف اپراتور
نویسنده پیام
محمد حسینی آفلاین
کاربر فعال بخش رباتیک
****

ارسال‌ها: 1,363
موضوع‌ها: 139
تاریخ عضویت: آذر ۱۳۸۴

تشکرها : 974
( 1780 تشکر در 620 ارسال )
ارسال: #1
مشکل در تعریف اپراتور
سلام!
این کد رو ببینین

کد:
#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 چی شد !

به راه بادیه رفتن، به از نشستن باطل ------------- اگرچه وصل نیابم، بقدر وسع بکوشمRolleyes
۱۴-اردیبهشت-۱۳۸۸, ۰۹:۱۹:۲۶
ارسال‌ها
پاسخ
محمد حسینی آفلاین
کاربر فعال بخش رباتیک
****

ارسال‌ها: 1,363
موضوع‌ها: 139
تاریخ عضویت: آذر ۱۳۸۴

تشکرها : 974
( 1780 تشکر در 620 ارسال )
ارسال: #2
RE: مشکل در تعریف اپراتور
023
چهارشنبه امتحان پیشرفته دارم ! 033

به راه بادیه رفتن، به از نشستن باطل ------------- اگرچه وصل نیابم، بقدر وسع بکوشمRolleyes
۱۵-اردیبهشت-۱۳۸۸, ۰۱:۰۳:۰۷
ارسال‌ها
پاسخ
hoax3r آفلاین
كاربر دو ستاره
**

ارسال‌ها: 63
موضوع‌ها: 2
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 38
( 93 تشکر در 46 ارسال )
ارسال: #3
RE: مشکل در تعریف اپراتور
اون - رو هم باید -- (دو تا منفی) بزاری دیگه اگه قصد داری از شی یکی کم کنی، در غیر این صورت معنای
منفی کردن میده در نتیجه اگه - رو بخوای ببری اونور معناشو از دست میده و ....

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

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

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

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

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

سرم درد میکنه برای یه امتحان ولی استاد ... ، ... ، وووو، ؟؟<>#% مون خیلی بی خیاله
۱۵-اردیبهشت-۱۳۸۸, ۱۰:۰۳:۲۱
ارسال‌ها
پاسخ
تشکر شده توسط : محمد حسینی
محمد حسینی آفلاین
کاربر فعال بخش رباتیک
****

ارسال‌ها: 1,363
موضوع‌ها: 139
تاریخ عضویت: آذر ۱۳۸۴

تشکرها : 974
( 1780 تشکر در 620 ارسال )
ارسال: #4
RE: مشکل در تعریف اپراتور
خيلي ممنون. نميدونستم بايد حالت پيشوندي و پسوندي رو جدا تعريف كرد!

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

به راه بادیه رفتن، به از نشستن باطل ------------- اگرچه وصل نیابم، بقدر وسع بکوشمRolleyes
۱۵-اردیبهشت-۱۳۸۸, ۱۲:۲۳:۳۶
ارسال‌ها
پاسخ
hoax3r آفلاین
كاربر دو ستاره
**

ارسال‌ها: 63
موضوع‌ها: 2
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 38
( 93 تشکر در 46 ارسال )
ارسال: #5
RE: مشکل در تعریف اپراتور
نقل قول: خيلي ممنون. نميدونستم بايد حالت پيشوندي و پسوندي رو جدا تعريف كرد!

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

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

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

و در مورد -- که کارش کم کردن یک واحد از عملوندش هست و چون حالت پسوندی رو تعریف نکردین وارنینگ میده
۱۵-اردیبهشت-۱۳۸۸, ۱۵:۵۰:۴۳
ارسال‌ها
پاسخ
تشکر شده توسط : محمد حسینی


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  تعریف عمومی کلاس محمد حسینی 1 2,499 ۳۰-اردیبهشت-۱۳۸۸, ۰۰:۲۴:۱۰
آخرین ارسال: محمد حسینی
  تعریف پابلیک شی محمد حسینی 2 2,522 ۲۹-اردیبهشت-۱۳۸۸, ۱۸:۱۰:۲۰
آخرین ارسال: محمد حسینی

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS