首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类的有关问题,好像是变量传不出去,或是作用域

2012-02-09 
类的问题,好像是变量传不出去,或是作用域。#includeiostream.h#includemath.hclassCPoint{public:intpx

类的问题,好像是变量传不出去,或是作用域。
#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;

}

热点排行