تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 8 از 8

نام تاپيک: دو سوال در مورد operator

  1. #1
    آخر فروم باز Mehran NZ's Avatar
    تاريخ عضويت
    Sep 2006
    پست ها
    2,208

    پيش فرض دو سوال در مورد operator

    دوستان من در ساختن operator در C++ به سه مشکل بر خوردم
    1.در operator= باید بصورت زیر کد رو نوشت می خواستم بدونم منظور از ratio& در اول کد چیه و دقیقا چه کاری انجام میده؟
    (اون قسمت رو قرمز کردم)

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    2.در مورد اشاره گر this اگه یه توضیحی بدید ممنون می شم که الان دقیقا داره به کجا اشاره می کنه؟!

    3.این مشکل یکم عجیبه من operator+ روبصورت زیر پیاده سازی کردم و قاعدتا نباید مشکلی داشته باشه ولی کامپایلر پیغام خطای عجیبی میده که در پایین کدم اوردمش در ضمن من از visual studio 2003 استفاده می کنم.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    خطای اعلام شده

    --------------------Configuration: Text1 - Win32 Debug--------------------
    Compiling...
    Text1.cpp
    C:\c++\1\Text1.cpp(5) : fatal error C1001: INTERNAL COMPILER ERROR
    (compiler file 'msc1.cpp', line 1786)
    Please choose the Technical Support command on the Visual C++
    Help menu, or open the Technical Support help file for more information
    Error executing cl.exe.
    Last edited by Mehran NZ; 13-11-2007 at 00:24.

  2. #2
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    منظور از &ratio اینه که تابع یک ارجاع بازمیگردونه نه یک کپی.همونطور که میدونی this به شی جاری اشاره میکنه و وقتی * پشتش قرار میگیره -مثل وقتی که * پشت یک اشاره گر معمولی قرار میگیره- خود شئ مد نظر گرفته میشه نه اشاره گرش که با توجه به نوع مقدار برگشتی تابع که ارجاع به شئ هست, تابع یک ارجاع به شئ ی که اون رو فراخوانی کرده برمیگردونه.
    کدی هم که گفتی error میده رو من توی (VS 2003(VC++7.0 عینا کپی کردم مشکلی نداشت و برنامه 8 6 رو چاپ کرد.
    Last edited by m3hrz4d; 13-11-2007 at 00:49.

  3. #3
    آخر فروم باز Mehran NZ's Avatar
    تاريخ عضويت
    Sep 2006
    پست ها
    2,208

    پيش فرض

    this روگرفتم سوال سوم هم انگار مشکل از کامپایلر منه
    حالا می رسیم به این پایینی که یکم گیره
    منظور از &ratio اینه که تابع یک ارجاع بازمیگردونه نه یک کپی.
    1. چرا اصلا ما باید از operator = استفاده کنیم یعنی فرقش با کپی ساز چیه؟ چه کاری این انجام میده که کپی ساز نمی تونه؟
    2. یعنی عبارت &ratio فقط یک جور علامته برای جدا کردن کپی ساز از operatoe = و کار خاصی نمی کنه؟؟!!!!

  4. #4
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    this روگرفتم سوال سوم هم انگار مشکل از کامپایلر منه
    حالا می رسیم به این پایینی که یکم گیره

    1. چرا اصلا ما باید از operator = استفاده کنیم یعنی فرقش با کپی ساز چیه؟ چه کاری این انجام میده که کپی ساز نمی تونه؟
    2. یعنی عبارت &ratio فقط یک جور علامته برای جدا کردن کپی ساز از operatoe = و کار خاصی نمی کنه؟؟!!!!
    اینجا 2 تا سوال سوال جدا مطرحه.یکی اینکه چرا اصلا ما operator = رو گرانبار(Overload) میکنیم؟ میگه نمیشه همینطوری هم با دستور انتساب یک شی رو به یک شی دیگه انتساب بدیم؟ :
    وقتی ما در حالت عادی 1 شی رو به یک شی دیگه انتساب میدیم داده های شی اول عینا توی داده های شی دوم قرار میگیرن که در مواقعی (مثل کلاس رشته یا اکثر وقت هایی که از new استفاده میشه توی کلاس)ما نمیخواهیم داده ها عینا کپی بشن و میخواهیم خودمون عملیاتی رو انجام بدیم و دستی کار انتساب رو انجام بدیم.

    سوال دوم اینه که تایپ خروجی تابع operator = چی باید باشه؟
    دستور انتساب توی ++C کلا اینطوری پیاده سازی شده که وقتی 1 متغیر رو به 1 متغیر دیگه نسبت میدی بعد از اینکه کار انتساب تموم شد یک ارجاع به شی دوم برگردونده میشه.یعنی اگه مثلا اون متغیر یک شی باشه و set هم یک متد از کلاس, دستور :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    معادل دستور :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    هستش یعنی عبارت (a= b) یک ارجاع از شی سمت چپ برمیگردونه.
    به همین خاطر ما هم که operator = رو Overload میکنیم تایپ خروجیمون یک ارجاع به شی فراخواننده(سمت چپ) هستش که اینجا با ratio& نشونش میدیم.یعنی بجای ارسال یک کپی جدید (ratio بدون &) ارجاع همون شی اول رو برمیگردونیم.

    در صورتی که توی جمع اینطور نیست و وقتی 2 شی جمع میشن یک شی جدید که حاصل جمع 2 شی قبلی هست برگردونده میشه(توی مثالی که زدی z) واسه همین دیگه & برای ratio نمیگذاریم.
    امیدوارم گیجت نکرده باشم.
    Last edited by m3hrz4d; 13-11-2007 at 14:34.

  5. #5
    آخر فروم باز Mehran NZ's Avatar
    تاريخ عضويت
    Sep 2006
    پست ها
    2,208

    پيش فرض

    توضیحاتت کامل بود و جای سوالی باقی نذاشت
    فقط مجبور شدم سه چهار باری بیام از اول بخونمش
    امید وارم موفق باشی

  6. #6
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام.
    ممنون از دوست خوبم به خاطر توضيحات كاملشون.

    دليل پست من به خاطر مشكلي بود كه در مورد كامپايلرتون پيش اومد :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    براي حل شدن مشكل :
    1- precompiled header از برنامه حذف كنين(stdafx). (يك پروژه جديد و خالي ايجاد كنين)
    2- از سوئيچ Zm#nn/ علاوه بر ساير سوئيچ ها استفاده كنين. (nn عددي بين 100 تا 2000 ميتونه باشه)

  7. #7
    آخر فروم باز Mehran NZ's Avatar
    تاريخ عضويت
    Sep 2006
    پست ها
    2,208

    پيش فرض

    براي حل شدن مشكل :
    1- precompiled header از برنامه حذف كنين(stdafx). (يك پروژه جديد و خالي ايجاد كنين)
    2- از سوئيچ Zm#nn/ علاوه بر ساير سوئيچ ها استفاده كنين. (nn عددي بين 100 تا 2000 ميتونه باشه)
    با تشکر از جواب و راهنماییتون ولی
    مثل اینکه شما اشتباه کردید سرفایل stdafx در vs 2005 بطور خودکار ایجاد می شه ولی من از نسخه 2003 دارم استفاده می کنم
    و این سرفایل رو از اول نذاشته بودم که بخوام پاکش کنم !(راستش و بخواید اصلا نمی دونم چی هست یه تاپیک هم در موردش زدم)
    سوییچ Zm#nn/ دیگه چی چی بیده؟
    فکر کنم یک جور سر فایله درسته؟اگه اشتباه نکنم بد تایپ کردید
    Last edited by Mehran NZ; 14-11-2007 at 00:40.

  8. #8
    آخر فروم باز Mehran NZ's Avatar
    تاريخ عضويت
    Sep 2006
    پست ها
    2,208

    پيش فرض

    someone جان بابا بیا بدادم برس این کامپایلرم حسابی قاطی کرده ببین برای برنامه زیر چه خطایی میده در حالی که
    همین برنامه رو تو pm به m3hrz4d دادم کامپایلکرد گفت درست کار می کنه

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اینم خطاش
    --------------------Configuration: Text1 - Win32 Debug--------------------
    Compiling...
    Text1.cpp
    C:\c++\2\Text1.cpp(21) : error C2248: 'num' : cannot access private member declared in class 'ratio'
    C:\c++\2\Text1.cpp(11) : see declaration of 'num'
    C:\c++\2\Text1.cpp(21) : error C2248: 'num' : cannot access private member declared in class 'ratio'
    C:\c++\2\Text1.cpp(11) : see declaration of 'num'
    C:\c++\2\Text1.cpp(21) : error C2248: 'den' : cannot access private member declared in class 'ratio'
    C:\c++\2\Text1.cpp(11) : see declaration of 'den'
    C:\c++\2\Text1.cpp(21) : error C2248: 'den' : cannot access private member declared in class 'ratio'
    C:\c++\2\Text1.cpp(11) : see declaration of 'den'
    C:\c++\2\Text1.cpp(27) : error C2593: 'operator ==' is ambiguous
    Error executing cl.exe.

    Text1.exe - 5 error(s), 0 warning(s)
    Last edited by Mehran NZ; 14-11-2007 at 00:25.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •