PDA

View Full Version : مشکل با وراثت



drstrike
پنج شنبه 02 تیر 1390, 10:23 صبح
سلام...
برنامه مقدار مساحت و محیط رو حساب نمیکنه؛ به عبارتی 0 بر میگردنه. منکه نفهمیدم مشکلش کجاس.
ممنون میشم مشکل رو حل کنید
#include <iostream.h>
#include <conio.h>
class rectangle {
public:
rectangle(int a=0, int b=0) {x=a; y=b;} //default constructor
~rectangle(){x=y=0;}
void setcoordinate(int a, int b){x=a; y=b;} //set coordinates
int getx() {return x;} // access Function
int gety() {return y;} // access Function
private:
int x, y;
};
//*************
class calcute : public rectangle {
public:
calcute(int a=0, int b=0) {s=a; p=b;}
~calcute(){s=p=0;}
int circ()
{
s=(getx() + gety()) * 2;
return s;
} //calculate circ
int area()
{
p=getx() * gety();
return p;
} //calculate area
void areaprt()
{
cout<<"\nArea of Rectangle is: "<<area();
}
void circprt()
{
cout<<"\nCircum of Rectangle is: "<<circ();
}
private:
int s,p;
};
//***************
int main()
{
clrscr();
int x,y;
cout<<"\nEnter Length: "; cin>>x;
cout<<"\nEnter Width: "; cin>>y;
rectangle rec;
calcute calc;
rec.setcoordinate(x,y);
cout<<calc.area()<<" "<<calc.circ()<<endl;
calc.areaprt();
getch();
return 0;
}

BeginnerProgrammer
پنج شنبه 02 تیر 1390, 12:19 عصر
با سلام
مشکل در main برنامه س شما x,y که کاربر وارد میکنه رو به rec نسبت دادین و بعد انتظار محاسبه رو از کلاس دیگه ای دارین که اصلاً ربطی به rec نداره .
چون کلاس calc از کلاس rec ارث میبره پس هر تابع پابلیک این کلاس توسط کلاس calcute قابل دستیابی یعنی تابع setcoordinate جزء یکی از توابع این کلاس محسوب میشه یعنی باید x,y مورد نظر رو از طریق این کلاس ست کنید (اینم کد اصلاح شده):


int main()
{
// clrscr();
int x,y;
cout<<"\nEnter Length: "; cin>>x;
cout<<"\nEnter Width: "; cin>>y;
//rectangle rec;
calcute calc;
calc.setcoordinate(x,y);
cout<<calc.area()<<" "<<calc.circ()<<endl;
calc.areaprt();
getch();
return 0;
}