类的问题,好像是变量传不出去,或是作用域。
#include <iostream.h>
#include <math.h>
class CPoint
{
public:
int px,py;
CPoint(){ }
CPoint(int x1,int y1) {px=x1;py=y1;}
};
class CLine:public CPoint
{
public:
int lx,ly;
CLine(){}
CLine(int x1,int y1,int x2,int y2):CPoint(x1,y1)
{
lx=x2;
ly=y2;
}
double juli(CPoint a,CLine b);
double juli();
};
class CJuxing:public CLine
{
public:
int jx,jy;
CJuxing(int x1,int y1,int x2,int y2,int x3,int y3):CLine(x1,y1,x2,y2)
{
jx=x3;
jy=y3;
}
double zhouchang(CLine a,CLine b);
double mianji(CLine a,CLine b);
};
double CLine::juli(CPoint a,CLine b)
{
return sqrt(pow((a.px-b.lx),2)+pow((a.py-b.ly),2));
}
double CLine::juli()
{
return sqrt(pow((px-lx),2)+pow((py-ly),2));
}
double CJuxing::zhouchang (CLine a,CLine b)
{
return ((a.juli()+b.juli())*2);
}
double CJuxing::mianji (CLine a,CLine b)
{
return (a.juli()*b.juli());
}
int flag=3;
CPoint p1;
CLine l1;
CLine l2;
int hzb,zzb;
void main()
{
do
{
flag=3;
cout < < "请输入一个点的横坐标和纵坐标 ";
cin> > hzb> > zzb;
CPoint p1(hzb,zzb);
cout < < "一个点已经构造\n ";
cout < < "请输入另一个点的横坐标和纵坐标 ";
cin> > hzb> > zzb;
CLine l1(p1.px,p1.py,hzb,zzb);
cout < < "一条直线已经构造\n ";
do
{
flag=3;
cout < < "请输入第三个点的横坐标和纵坐标 ";
cin> > hzb> > zzb;
int temp1=(p1.px-l1.lx)*(hzb-l1.lx)+(p1.py-l1.ly)*(zzb-l1.ly);
int temp2=(p1.px-l1.lx)*(hzb-l1.lx)+(p1.py-l1.ly)*(zzb-l1.ly);
if(temp1*temp2!=0)
{
cout < < "输入的三个点构不成矩形\n ";
cout < < "请选择:0.退出程序\t1.只重输第三个点\t2.重输全部三个点\n ";
cin> > flag;
}
}while(flag==1);
}while(flag==2);
if (flag==0)return;
CLine l2(l1.lx,l1.ly,hzb,zzb);
CJuxing j1(l1.px,l1.py,l2.px,l2.py,hzb,zzb);
cout < < "一个矩形已经构造\n ";
cout < <endl;
cout < < "直线距离是: " < <l1.juli(p1,l1);
cout < < "\n矩形周长是: " < <j1.zhouchang (l1,l2);
cout < < "\n矩形面积是: " < <j1.mianji (l1,l2) < <endl;
}
有一些逻辑错误 的,暂且不用管,我的测试结果是这样的。
请输入一个点的横坐标和纵坐标0 0
一个点已经构造
请输入另一个点的横坐标和纵坐标0 2
一条直线已经构造
请输入第三个点的横坐标和纵坐标2 2
一个矩形已经构造
直线距离是:0
矩形周长是:5.65685
矩形面积是:0
ress any key to continue
调试时,开始时变量还传得好好的,执行到
cout < < "直线距离是: " < <l1.juli(p1,l1);
cout < < "\n矩形周长是: " < <j1.zhouchang (l1,l2);
cout < < "\n矩形面积是: " < <j1.mianji (l1,l2) < <endl;
时,类内的成员变量全都不是原来输入的数了, 是出了什么问题?怎么样解决?
[解决办法]
class CPoint
{
public:
int px,py;
CPoint(){ }
CPoint(int x1,int y1) {px=x1;py=y1;}
};
class CLine:public CPoint
{
public:
int lx,ly;
CLine(){}
CLine(int x1,int y1,int x2,int y2):CPoint(x1,y1)
{
lx=x2;
ly=y2;
}
double juli(CPoint a,CLine b);
double juli();
};
class CJuxing:public CLine
{
public:
int jx,jy;
CJuxing(int x1,int y1,int x2,int y2,int x3,int y3):CLine(x1,y1,x2,y2)
{
jx=x3;
jy=y3;
}
double zhouchang(CLine a,CLine b);
double mianji(CLine a,CLine b);
};
double CLine::juli(CPoint a,CLine b)
{
return sqrt(pow((a.px-b.lx),2.0f)+pow((a.py-b.ly),2.0f));
}
double CLine::juli()
{
return sqrt(pow((px-lx),2.0f)+pow((py-ly),2.0f));
}
double CJuxing::zhouchang (CLine a,CLine b)
{
return ((a.juli()+b.juli())*2);
}
double CJuxing::mianji (CLine a,CLine b)
{
return (a.juli()*b.juli());
}
int main()
{
int flag=3; //!! 最好不用全局变量, 都移到这里吧:)
CPoint p1; //!!
CLine l1; //!!
CLine l2; //!!
int hzb,zzb; //!!
do {
flag=3;
cout < < "请输入一个点的横坐标和纵坐标 ";
cin> > hzb> > zzb;
p1 = CPoint(hzb,zzb); //!!!!!!!!!!!!!!!
cout < < "一个点已经构造\n ";
cout < < "请输入另一个点的横坐标和纵坐标 ";
cin> > hzb> > zzb;
l1 = CLine(p1.px,p1.py,hzb,zzb); //!!!!!!!!!!!!!!
cout < < "一条直线已经构造\n ";
do
{
flag=3;
cout < < "请输入第三个点的横坐标和纵坐标 ";
cin> > hzb> > zzb;
int temp1=(p1.px-l1.lx)*(hzb-l1.lx)+(p1.py-l1.ly)*(zzb-l1.ly);
int temp2=(p1.px-l1.lx)*(hzb-l1.lx)+(p1.py-l1.ly)*(zzb-l1.ly);
if(temp1*temp2!=0) {
cout < < "输入的三个点构不成矩形\n ";
cout < < "请选择:0.退出程序\t1.只重输第三个点\t2.重输全部三个点\n ";
cin> > flag;
}
} while(flag==1);
}while(flag==2);
if (flag==0) return 0;
l2 = CLine(l1.lx,l1.ly,hzb,zzb);
CJuxing j1(l1.px,l1.py,l2.px,l2.py,hzb,zzb);
cout < < "一个矩形已经构造\n ";
cout < <endl;
cout < < "直线距离是: " < <l1.juli(p1,l1);
cout < < "\n矩形周长是: " < <j1.zhouchang (l1,l2);
cout < < "\n矩形面积是: " < <j1.mianji (l1,l2) < <endl;
}