PDA

View Full Version : مشکل در یک برنامه در مورد تابع دوست در تعریف مجدد عملگرها



alirah84
یک شنبه 12 آذر 1391, 14:10 عصر
سلام
این برنامه یک کلاس به نام مستطیل داره که مساحت را میخونه .و در Main ،یک مساحت دیگه از کاربر گرفته میشه و با مساحت اول جمع میشه.حالا من اینو با تابع friend نوشتم،یعنی توی مین object اومده سمت راست ،عدد اومده سمت چپ.ولی برنامه ارور میده.این ارور ها:

Error 1 error C2678: binary '+' : no operator found which takes a left-hand operand of type 'int' (or there is no acceptable conversion)
IntelliSense: no operator "+" matches these operands

اینم کد برنامه:

#include <iostream>
#include <string>
using namespace std;
class rect
{
int x,s;
public:
void input();
int calc();
friend int operator + (rect ob,int j);
};
void rect::input()
{
cout<<"Zele:";
cin>>x;
}
int rect::calc()
{
return s=x*x;
}

int main()
{
int f,t;
cout<<"Masahat Khod Ra Vared Konid:";
cin>>f;
rect obj;
obj.input();
obj.calc();
t=f+obj;
cout<<t;
cin.get();
cin.get();
}

int operator + (rect ob,int j)
{
return ob.s+j;
}

مسعود اقدسی فام
یک شنبه 12 آذر 1391, 15:42 عصر
اپراتوری که سمت چپ از نوع خود کلاس باشه لازم نیست friend باشه. اونی که سمت چپی غیر از اون باشه با این روشه.

alirah84
یک شنبه 12 آذر 1391, 17:29 عصر
مرسی مشکل برنامه قبل حل شد.
این یه برنامه دیگست چند تا سوال دارم ازش
کلاسی برای مستطیل و کلاسی برای مثلث تعریف کنید.سپس مشخصات یک مستطیل و یک مثلث را بخوانید .سپس عملگر ستاره مساوی را به گونه ای تعریف کنید که مساحت آن دو را در هم ضرب نموده و حاصل را در مساحت مثلث جایگزین کند.

#include <iostream>
#include <string>
using namespace std;
class triangle;
class rect
{
int x,y,s1;
public:
void input();
int calc();
};
void rect::input()
{
cout<<"Azla Ra Vared Konid:";
cin>>x>>y;
}
int rect::calc()
{
return s1=x*y;
}
class rect;
class triangle
{
int a,h,s2;
public:
void input();
int calc();
friend triangle operator *=(rect );
};
void triangle::input()
{
cout<<"Ghade Va Ertefa Ra Vared Konid:";
cin>>a>>h;
}
int triangle::calc()
{
return s2=(a*h)/2;
}
triangle triangle::operator *=(rect o2)
int main()
{
triangle o1;
rect o2;
o1.input();
o1.calc();
o2.input();
o2.calc();
o1*=o2;
}
این برنامه ناقصه .تابع اوپراتورش چجوریه؟چرا باید تابع اوپراتورش فقط توی کلاس مثلث باشه؟مگه توی این تابع ما نباید به مساحت مستطیل دسترسی داشته باشیم؟در صورتی که ما توی کلاس مثلث تابع اپوراتور رو تعریف کردیم.اگه میشه یه توضیح کاملی بدید من متوجه بشم.
ممنون

مصطفی ساتکی
یک شنبه 12 آذر 1391, 19:02 عصر
#include "stdafx.h"


#include <iostream>
#include <string>


using namespace std;

class BhTriangle;

class BhRect
{
int width ,height;
int area;
friend class BhTriangle ;
public :
BhRect();
BhRect(int w,int h):width(w),height(h)
{

}
void inputData()
{
cin >> width >> height;
}
void CalcArea()
{
area = width * height;
}

};
class BhTriangle
{
int base , height;
int area;

public :
BhTriangle();
BhTriangle(int area)
{
this->area = area;
}
BhTriangle(int b ,int h):base(b),height(h)
{
}

void inputData()
{
cin >> base >> height;
}
void calcArea()
{
area = (base * height) / 2;
}
void operator *=(BhRect rct)
{
area *= rct.area;

}
void displayArea()
{
cout << area;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
BhRect r(2,3);
r.CalcArea();
BhTriangle t(6,4);
t.calcArea();

t *= r;
t.displayArea();



return 0;
}

alirah84
یک شنبه 12 آذر 1391, 21:07 عصر
اگه بخوام با تابع اوپراتور Friend بنویسم ،دو تا مساحت ها رو باید به تابع فرستاد.خوب مگه در اینجا ( o1*=o2 ) ،سمت چپی از طریق اشاره گر this فرستاده نمیشه،پس چرا باید دو تا شی رو به تابع فرستاد؟

alirah84
دوشنبه 13 آذر 1391, 21:59 عصر
اگه بخوام با تابع اوپراتور Friend بنویسم ،دو تا مساحت ها رو باید به تابع فرستاد.خوب مگه در اینجا ( o1*=o2 ) ،سمت چپی از طریق اشاره گر this فرستاده نمیشه،پس چرا باید دو تا شی رو به تابع فرستاد؟

دوستان کسی نیست جواب سوال قبلم رو بده؟

مصطفی ساتکی
دوشنبه 13 آذر 1391, 22:49 عصر
خوب معلومه friend function خارج از scope کلاس تعریف میشه پس شما تو BhTriangle تابع مورد نظر را بعنوان friend function معرفیش کنید و درخارج کلاس هم BhTriangle و BhRect رو براش بفرستید.

m.r531
سه شنبه 28 آبان 1392, 12:32 عصر
سلام کسی میتونه این برنامه رو واسم بنویسه واقعا ممنون میشم:خجالت:
برنامه بنویسید که 3 ضلع مثلث را بگیرد و یک کلاس دوست برای محیط مثلث را محاسبه کند و یک کلاس که مساحت مثلث را محاسبه و چاپ کند
واسه دایره شم اگه میشه برنامه شو بنویسید لطفا