دو سوال در مورد operator


دو سوال در مورد 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.



قرار دادنن یک دیالوگ بالای تمام صفحات ویندوز

1:

منظور از &ratio اینه که تابع یک ارجاع بازمیگردونه نه یک کپی.همونطور که میدونی this به شی جاری اشاره میکنه و وقتی * پشتش برنامه میگیره -مثل وقتی که * پشت یک اشاره گر معمولی برنامه میگیره- خود شئ مد نظر گرفته میشه نه اشاره گرش که با توجه به نوع مقدار برگشتی تابع که ارجاع به شئ هست, تابع یک ارجاع به شئ ی که اون رو فراخوانی کرده برمیگردونه.
کدی هم که فرمودی error میده رو من توی (VS 2003(VC++7.0 عینا کپی کردم مشکلی نداشت و برنامه 8 6 رو چاپ کرد.


يعني كسي پيدا نميشه كه بتونه جواب منو بده


یک سوال از ایجاد اعداد تصادفی

2:

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


تغییر رنگ و فونت در یک edit control
چرا اصلا ما باید از operator = هستفاده کنیم یعنی فرقش با کپی ساز چیه؟ چه کاری این انجام میده که کپی ساز نمی تونه؟
2.


کمک در مورد نوشتن برنامه ( پروژه ) با ++c
یعنی عبارت &ratio فقط یک جور علامته برای جدا کردن کپی ساز از operatoe = و کار خاصی نمی کنه؟؟!!!!


سود و كوه در C#

3:

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

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

در صورتی که توی جمع اینطور نیست و وقتی 2 شی جمع میشن یک شی جدید که حاصل جمع 2 شی قبلی هست برگردونده میشه(توی مثالی که زدی z) واسه همین دیگه & برای ratio نمیگذاریم.
امیدوارم گیجت نکرده باشم.


مرا دریابید


سوال ؟؟

4:

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

5:

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

دليل پست من به خاطر مشكلي بود كه در مورد كامپايلرتون پيش اومد :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
براي حل شدن مشكل :
1- precompiled header از برنامه حذف كنين(stdafx).

(يك پروژه جديد و خالي ايجاد كنين)
2- از سوئيچ Zm#nn/ علاوه بر ساير سوئيچ ها هستفاده كنين.

(nn عددي بين 100 تا 2000 ميتونه باشه)

6:

با تشکر از جواب و راهنماییتون ولی
مثل اینکه شما اشتباه کردید سرفایل stdafx در vs 2005 بطور خودکار ایجاد می شه ولی من از نسخه 2003 دارم هستفاده می کنم
و این سرفایل رو از اول نذاشته بودم که بخوام پاکش کنم !(راستش و بخواید اصلا نمی دونم چی هست یه تاپیک هم در موردش زدم)
سوییچ Zm#nn/ دیگه چی چی بیده؟
فکر کنم یک جور سر فایله درسته؟اگه اشتباه نکنم بد تایپ کردید

7:

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)


70 out of 100 based on 50 user ratings 1150 reviews

@