我需要在类里建立一个n*2的动态数组(这样才能实现在所有的类的成员函数进行引用数据),然后利用MFC的控件按钮为其添加数据,如何实现?这是我的一个作业题如下:
    编写一个求任意多边形面积的程序。提示:通过界面输入数据,并把数据保存在一个二维数组或一个一维的自定义结构体类型的数组中,然后再进行计算。要求计算部分写成函数的形式,使计算程序与界面无关。MFC多边形面积计算动态数组

解决方案 »

  1.   

    //////////////////////////////////////////////////////////////////////////////
    //类定义class CPolygon  
    {
    public:
    CPolygon(int num);
    virtual ~CPolygon(); float  GetArea(); //取得面积
    BOOL   SetPoint(int point,float x,float y);//设置第point个点的坐标private:
    BOOL   Check();  //检查是否有数据没有设置
    int    pCount;   //边数,也就是顶点数
    float *px;       //顶点x的数组
    float *py;       //顶点y的数组
    BYTE  *pv;       //设置数据标志
    };//////////////////////////////////////////////////////////////////////////////
    //类实现CPolygon::CPolygon(int num)
    {
    if(num<3)              //至少是三角形
    {
    px=NULL;
    py=NULL;
    pv=NULL;
    pCount=0;
    }
    else
    {
    px=new float[num];  //按num开辟内存
    py=new float[num];
    pv=new BYTE[num];
    memset(px,0,sizeof(float)*num);//初始化内存
    memset(py,0,sizeof(float)*num);//初始化内存
    memset(pv,0,sizeof(BYTE)*num); //初始化内存 pCount=num;
    }
    }
    CPolygon::~CPolygon() //用完要回收开辟的内存
    {
    if(px) delete []px;
    if(py) delete []px;
    if(pv) delete []px;
    px=NULL;
    py=NULL;
    pv=NULL;
    }BOOL CPolygon::SetPoint(int point,float x,float y)
    {
    if(point>=0&&point<pCount) //点在范围内
    {
    *(px+point)=x;
    *(py+point)=y;
    *(pv+point)=1;         //置1,表示数据已经设置过了
            return TRUE;
    }
    return FALSE;
    }BOOL CPolygon::Check() //检查合法性
    {
    if(pCount==0)
    return FALSE;
    for(int i=0;i<pCount;i++)
    {
    if(*(pv+i)==0) 
    return FALSE;
    }
    return TRUE;
    }float CPolygon::GetArea(); 
    {
    if(Check()) //如果数据准备好
    {
    //计算结果
            //返回结果
    }
    return 0.0; //数据没准备好就返回0.0
    }
    //////////////////////////////////////////////////////////////////////////////
    //类调用,以三角形为例  CPolygon   xObject(3); //定义一个三角形  xObject.SetPoint(0,20.2,30.3); //设置第一点的值
      xObject.SetPoint(1,80.4,50.5); //设置第二点的值
      xObject.SetPoint(2,70.6,40.7); //设置第三点的值  float Result=xObject.GetArea();
      CString Info;
      if(Result==0.0)
      Info="计算有错误,请检查设置的点是否正确!";
      else
          Info.Format("三角型的值是:%f",Result);  MessageBox(Info);  //显示结果
      

  2.   

    "通过界面输入数据,并把数据保存在一个二维数组或一个一维的自定义结构体类型的数组中,"定义个结构struct CPoint
    {
       int x;
       int y;
    }
    然后定义个
    vector<CPoint>;
    这样每次push_back就可以加入数据了。
      

  3.   


    我是基于MFC做的,需要做一个界面实现。在你列举的代码中,我没理解的是数据的存储在什么地方?就是说我假设我需要存储一系列坐标在一个数组中,然后在面积计算的时候调用这个数组里的数据,实现计算。能不能解释一下我该如何操作
      

  4.   

    数据存在px,py里
    你完成GetArea()函数就可以了
    和MFC的接口
    你看类调用部分就是举的例