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

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

کدام نوع بازگشتی از سربارگذاری عملگر مناسب است؟

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

فرض کنیم برای کلاس C عملگری مثل ++ رو سربارگذاری کردیم که قراره در انتها آدرس خود شی فراخواننده برگرده. بهترین نوع بازگشتی این سربارگذاری چیه؟

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

1 پاسخ

0 امتیاز

مهم در پاسخ به این سوال نحوه‌ی استفاده از مقدار بازگشتی در برنامه است.
چند حالت رو در نظر می‌گیریم:
از مقدار بازگشتی برای فراخوانی توابع عضو غیر const استفاده می‌کنین: در این صورت نمی‌تونین ارجاع یا اشاره‌گر ثابت برگردونین. یعنی کد زیر اشتباهه

class C
{
private:
  int x;
public:
  C(int i = 0) : x(i) {}
  ~C(){}
  void reset() { this->x = 0; }
  const C& oprator++(unsigned int i)
  {
    this->x++;
    return *this;
  }
};
int main()
{
  C obj;
  (obj++).reset();
}

reset تابع غیرثابت عضو هست و بنابراین اگه اشاره‌گر ثابت باشه نمی‌تونه بهش دسترسی داشته باشه.

از مقدار بازگشتی فقط برای فراخوانی توابع عضو const استفاده می‌کنین: در این صورت استفاده از const & یا const * ترجیح داده می‌شه تا با نگاه کردن به امضای تابع متوجه بشین که فراخوانی به توابع غیرثابت انجام نشده. و اگه این دسترسی رو ناخواسته انجام دادین اخطار کامپایل به شما این مساله رو تذکر بده.

اما چرا از ارجاع به جای اشاره‌گر استفاده کنیم؟! برای مواردی مثل دسترسی به NULL. فرض کنید در برنامه‌ی زیر مقدار اشاره‌گر NULL بشه. اون وقت دسترسی به تابع یک شی NULL اتفاق می‌افته که درست نیست. به طور کلی استفاده از ارجاع نسبت به اشاره‌گر مطمئن‌تره.

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