早教吧 育儿知识 作业答案 考试题库 百科 知识分享

二维点容器设计C++首先设计一个二维点Point类,包括x,y2个浮点数成员;然后设计点容器PointContainer类,为该类设计成员函数:(1)成员函数voidAdd(Point&pt),实现向容器中添加点;(

题目详情
二维点容器设计C++
首先设计一个二维点Point类,包括x,y 2个浮点数成员;然后设计点容器PointContainer类,为该类设计成员函数:(1) 成员函数void Add(Point &pt),实现向容器中添加点;(2) 成员函数 void Remove(int index),删除容器中指定序号的点;(3) 成员函数 void Clear(),清空容器,删除所有点;(4) 成员函数 Point &Get(int index),返回指定序号点的引用;(5) 重载运算符“[ ]”,实现核(4)同样的功能;(6) 成员函数 int Count(),得到容器中点的数量;(7) 成员函数 int CloseToWhich(Point &pt,float fdist),返回容器中与参数pt距离小于fdist的第一个点的序号。(8) 编写主函数测试上述功能
▼优质解答
答案和解析
//////////////////////////pointContainer.h#ifndef CONTAINER_H
#define CONTAINER_H
#include
using std::cout;
using std::endl;
class PointContainer;
class Point
{
friend class PointContainer;
public:
Point():x(0),y(0),next(NULL){}
Point(float x,float y):x(x),y(y),next(NULL){}
private:
float x;
float y;
Point* next;
};
class PointContainer
{
public:
PointContainer()
{
head=NULL;
}
void Add(Point& pt);
void Remove(int index);
void Clear();
Point& Get(int index);
Point& operator[](int index);
int Count();
int CloseToWhich(Point& pt,float fdist);
void display();
void displayItem(Point& pt);
private:
Point* head;
};
#endif************************************************************************//////////////////pointContainer.cpp#include"pointContainer.h"
//#include
#include
//using std::cout;
//using std::endl;
void PointContainer::Add(Point& pt)
{
if(NULL==head)
{
head=&pt;
}
else
{
Point* temp=head;
while(temp->next)
{
temp=temp->next;
}
temp->next=&pt;
}
}
int PointContainer::Count()
{
int count=0;
Point* temp=head;
while(temp)
{
count++;
temp=temp->next;
}
return count;
}
void PointContainer::Remove(int index)
{
if(index>Count()|| head==NULL)
{
cout< return;
}
else
{
int i=1;
Point* temp=head;
while(temp)
{
if((index-1)==i)
{
break;
}
else
{
i++;
temp=temp->next;
}
}
temp->next=temp->next->next;
}
}
void PointContainer::Clear()
{
Point* tempHead=head;
Point* temp=NULL;
while(tempHead)
{
temp=tempHead;
tempHead=tempHead->next;
delete temp;
temp=NULL;
}
head=NULL;
}
Point& PointContainer::Get(int index)
{
int i=1;
Point* temp=head;
if(index>Count()|| index<1)
{
cout< return *(Point*)NULL;
}
while(temp)
{
if(index==i)
{
break;
}
temp=temp->next;
i++;
}
return *temp;
}
Point& PointContainer::operator[](int index)
{

int i=1;
Point* temp=head;
if(index>Count()|| index<1)
{
cout< return *(Point*)NULL;
}
while(temp)
{
if(index==i)
{
break;
}
temp=temp->next;
i++;
}
return *temp;
}
int PointContainer::CloseToWhich(Point& pt,float fdist)
{
int i=1;
float tempValue;
if(head==NULL)
{
cout< return 0;
}
Point* temp=head;
while(temp)
{
tempValue=(temp->x-pt.x)*(temp->x-pt.x)+(temp->y-pt.y)*(temp->y-pt.y);
if(fdist>sqrt(tempValue))
{
break;
}
i++;
temp=temp->next;
}
return i;}
void PointContainer::display()
{
if(head==NULL)
{
cout< return ;
}
Point* temp=head;
while(temp)
{
cout<x<y< temp=temp->next;
}
return;
}
void PointContainer::displayItem(Point& pt)
{
cout< return;
}*******************************************main.cpp#include"pointContainer.h"
#includeusing std::cout;
using std::endl;int main()
{
PointContainer PointCon;
Point* pt1=new Point(2,3);
Point* pt2=new Point(6,3);
Point* pt3=new Point(4,1);
PointCon.Add(*pt1);
PointCon.Add(*pt2);
PointCon.Add(*pt3);
PointCon.display();
// PointCon.Remove(2);
PointCon.display();
// PointCon.Clear();
PointCon.displayItem(PointCon[2]);
Point* pt4=new Point(7,2);
cout< return 1;
}