PDA

نسخه کامل مشاهده نسخه کامل : یک سوال تخصصی ++C در مورد Operator overloading



soheil1366
23-08-2006, 20:12
سلام
من وقتی عملگر >>(cout) را دوباره تعریف میکنم و در قسمت نام object ورودی به تابع const نمیگذارم بعد از اینکه بخواهم object را به خروجی بدم در حالی که در جلوی یا در پشت object از عملگر ++ استفاده بکنم کامپایلر ارور میدهد ولی اگر در موقع object ورودی به تابع const بگذارم دیگر ارور نمیدهد
لطفا هر کسی میتواند دلیل این را بگوید
در ضمن عملگر ++ را هم برای جلوی object و هم برای پشت object مجددا تعریف کرده ام
ostream &operator<<(ostream &out,classname &obj) حالتی که ارور میدهد
ostream &operator<<(ostream &out,const classname &obj) حالتی که ارور نمیده

someone
24-08-2006, 00:19
سلام.
parameter دوم نبايد توسط >> operator اصلاح (Modify) يا تغيير كنه.بنابراين بهتره به صورت
const reference تعريف بشه.
parameter دوم شما يك reference از كلاستون هست. يك reference فقط ميتونه مرجع يك Object باشه ونميتونه بعدا تغيير كنه و مرجع object ديگه اي بشه. در واقع يك reference مثل يك constant pointer هست. وكامپايلر يه
reference رو در هنگام اجرا اون رو يك constant pointer در نظر ميگيره.
ممكنه شما در برنامتون مقدار اين reference رو عوض كنيد يا اين مقدار دست كاري بشه.بنابراين بهتره به صورت const تعريف بشه.

soheil1366
24-08-2006, 10:49
از جواب کاملتون خیلی ممنونم ولی من باز هم متوجه نشدم که چرا به عملگر ++ ارور میده چون به نظر من در این مورد چه const بنویسم وچه ننویسم نباید به این کار من ایراد بگیره چون خودتون هم نوشتین بهتره به صورت const تعریف بشه نه ضروری.

someone
24-08-2006, 13:41
سلام دوست عزيز.
آيا سوالتون مربوط به برنامه ي " کلاس اعداد کسری " كه نوشتيد ميشه؟
در ضمن از كدام Ide استفاده ميكنيد؟

soheil1366
24-08-2006, 19:04
سلام
نه مربوط به كلاس اعداد كسري نيست
توي هر كامپايلري كه امتحان كردم همون ارور رو ميده

someone
24-08-2006, 23:58
سلام
نه مربوط به كلاس اعداد كسري نيست
توي هر كامپايلري كه امتحان كردم همون ارور رو ميده

دوباره سلام.
اگه ممكنه كد برنامتون و error ي كه ايجاد ميشه رو بذاريد.
ممنون.

sorset
25-08-2006, 11:44
ببخشید
اشتباهاً تو این تاپیک یه پست فرستادم
یا به عبارتی راه گم کردم
:blush:

soheil1366
25-08-2006, 11:50
سلام
شما در هر برنامه ای و هر کامپایلری که این روش رو امتحان کنید همون Error رو میده وربطی به برنامه و کامپایلر من نداره

someone
25-08-2006, 14:13
سلام
شما در هر برنامه ای و هر کامپایلری که این روش رو امتحان کنید همون Error رو میده وربطی به برنامه و کامپایلر من نداره

دوباره سلام.
دوست عزيز متوجه شدم. منظورتون از همون error چيه؟ شما نه كد برنامتون رو ميذاريد نه در باره ي error توضيح ميديد. هر error يه code و يه description داره. اگه نميتونيد كد رو بذاريد,حداقل code error و description رو پست كنيد.

soheil1366
25-08-2006, 23:48
دوباره سلام.
دوست عزيز متوجه شدم. منظورتون از همون error چيه؟ شما نه كد برنامتون رو ميذاريد نه در باره ي error توضيح ميديد. هر error يه code و يه description داره. اگه نميتونيد كد رو بذاريد,حداقل code error و description رو پست كنيد.
سلام
من گفتم كد خاصي رو نميگم براي مثال اين دو برنامه ي زير رو مقايسه كنيد تا به منظور من پي ببريد

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این کد درست بود ولی پایینی نه

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
میبینید که عملگر >> در حالت معمولی درست کار میکنه ولی در برنامه دومی در حالت ++ ارور میده

someone
26-08-2006, 01:53
دوباره سلام.
هر دو برنامه كاملا صحيح و درست هستند.به همين دليل از شما پرسيدم كه IDE شما چيه.
از version 7.0 به بعد , منظورم VS.net 2003 و VS.net 2005 اين مشكل وجود نداره. اگه از VS 6.0 استفاده ميكنيد
فكر كنم بهتره sp5 رو download كنيد. دليلش هم به خاطر نحوه برخورد كامپايلر با reference هاست كه قبلا در موردش صحبت كرديم.
اگه نظر من رو بخوايد ضرري نداره كه از VC++8.0 كه در مجموعه ي VS.net 2005 هم وجود داره استفاده كنيد.
فقط اگه از VC++8.0 استفاده ميكنيد بهتره اين تغييرات رو انجام بديد.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگه مشكلي پيش اومد باز اطلاع بديد.
ممنون.

soheil1366
26-08-2006, 20:41
سلام
خیلی ممنون که منو راهنمایی کردین