PDA

View Full Version : سوال: سربارگذاری عملگر جایگزینی



hafez1
یک شنبه 21 خرداد 1391, 21:53 عصر
می خواستم ببینم توی این کد چرا به >> گیر می ده؟
آیا این رو هم باید سربلر گذاری کنم؟


#include<iostream>
using namespace std;
// assignment.cpp
class Point
{
public:
Point &operator=( Point & ); // Right side is the argument.
int _x, _y;
};
// Define assignment operator.
Point &Point::operator=( Point &ptRHS )
{
_x = ptRHS._x;
_y = ptRHS._y;
return *this; // Assignment operator returns left side.
}
int main()
{
Point x, y;
x = y ;
cout << "x" << x << "y" << y ;
return 0;
}

one hacker alone
یک شنبه 21 خرداد 1391, 22:17 عصر
usingnamespace فاصله رو رعایت کن using namespace
مشکل باید حل بشه اگه نشد کدوم خط گیر میده؟

hafez1
یک شنبه 21 خرداد 1391, 22:33 عصر
درس نشد.
خط 25 دقیقا این ارورو میده:
Error 1 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Point' (or there is no acceptable conversion

hafez1
یک شنبه 21 خرداد 1391, 22:36 عصر
آخه جالب این جاس که به این برنامه همچین اروری نمی گیره.اینا چه فرقی دارن؟؟؟؟؟؟؟؟؟؟؟


#include<iostream>
using namespace std;
class Ratio
{ public:
Ratio(int =0, int =1); // default constructor
Ratio(const Ratio&); // copy constructor
Ratio& operator=(const Ratio&); // assignment operator
// other declarations go here
private:
int num, den;
// other declarations go here
};
Ratio& Ratio::operator=(const Ratio& r)
{ num = r.num;
den = r.den;
return *this;
}
int main()
{
Ratio x, y, z(22,7);
x = y = z;
cout << "x" << x << "y" << y << "z" <<z;
return 0;
}

one hacker alone
یک شنبه 21 خرداد 1391, 22:58 عصر
خط 25 من نمیبینم

hafez1
یک شنبه 21 خرداد 1391, 23:23 عصر
منظورم این خط کده.


cout << "x" << x << "y" << y ;

hafez1
دوشنبه 22 خرداد 1391, 08:52 صبح
جواب این سوال برام خیلی مهمه.ذهنم رو درگیر کرده.
شاید یک نفر بتونه با مقایسه این دو برنامه مشکل برنامه اول رو بفهمه.
اگه ممکنه کمک کنید

one hacker alone
دوشنبه 22 خرداد 1391, 10:42 صبح
ببینید دوست عزیز این خطا به شما میگه چیزی که میخواهید چاپ کنی مجهوله یعنی اینکه x,y از نوع کلاس تعریف شدن و کلاس هم خودش یه سری متد ها داره
>>>> شما نمیتونی یک کلاس رو چاپ کنی میتونی متدهاشو چاپ کنی
یعنی x,y به اون شکل نوشتی چاپ نمیشن
اصلا کد اول شما جایی که نوشتین x=y یه کار بیخود هست من که دلیلی نمیبینم
اگه هر دو از یه کلاس تعریف شده ( که اینجوریه) پس چرا محتویاتشون رو میریزی تو هم چون خودشون دارن

hafez1
دوشنبه 22 خرداد 1391, 10:54 صبح
پس این ینی برنامه ای که من نوشتم بیهودس.
پس چه جوری از سربارگذاری= استفاده می کنند؟؟

one hacker alone
دوشنبه 22 خرداد 1391, 11:31 صبح
ببینید شما دقیقا میخواهید چکار کنید؟
اگه پروژه هست کامل بگین موضوع پروژه چیه؟
اگه دارید تمرین میکنید بگید چه مبحثی رو دارید کار میکنید تا اگه انشاالله در توانمون بود توضیح بدم

kia.celever
دوشنبه 22 خرداد 1391, 11:55 صبح
ببینید شما operator= رو سربارگذاری کردید! هیچ ربطی به operator<< نداره!
عملگر cout رو باید جداگانه سربارگذاری بکنید.
(در ضمن 2 تا برنامه برای من ارور میدن!)

hafez1
دوشنبه 22 خرداد 1391, 14:14 عصر
ببخشید می شه بگید چی جوری باید << رو سربار گذاری کرد؟؟؟؟؟؟؟؟؟
اررورا رو هم اگه زحمتی نیس رفع کنید.

kia.celever
دوشنبه 22 خرداد 1391, 14:18 عصر
کلاس Point رو اینطوری عوض کنید:
class Point
{
public:
Point &operator=( Point & ); // Right side is the argument.
friend ostream& operator<< (ostream &output, const Point &point) {
cout << point._x << " " << point._y << endl;
return output;
}
int _x, _y;
};