头文件:
pont.h:
#ifndef POINT_H_INCLUDED
#define POINT_H_INCLUDED
#include<iostream>
using namespace std;
class point
{
friend ostream &operator<<(ostream &output,const point &p);
public:
//重载的构造函数
point(double =0,double =0);
point(const point &p);
//析构函数
~point();
//重载定值函数
void setpoint(double a,double b);
void setpoint(point &p);
//取值函数
double getx()const
{
return x;
}
double gety()const
{
return y;
}
private:
double x;
double y;
};
//下面是两种不同的设定值的方式,重载函数的用法
point ::point (double a,double b)
{
x=a;
y=b;
}
point ::point(const point &p)
{
x=p.getx();//x=p.getx()
y=p.gety();//y=p.gety()也行的哦
}
point ::~point(){}
void point ::setpoint(double a,double b)
{
x=a;
y=b;
}
void point::setpoint(point &p)
{
x=p.getx();
y=p.gety();
}
ostream&operator<<(ostream &output,const point &p)
{
output<<"("<<p.getx()<<","<<p.gety()<<")";
return output;
}
#endif // POINT_H_INCLUDED
头文件:
line.h:
#ifndef LINE_H_INCLUDED
#define LINE_H_INCLUDED
#include<iostream>
#include<math.h>
#include"point.h"
using namespace std;
class line
{
friend ostream &operator<<(ostream &,line &);
public:
//重载的构造函数
line (double startx=0,double starty=0,double endx=0,double endy=0);
line (point start,point end);
line (line &line);
//析构~~~
~line();
//重载定值函数
void setline(double startx=0,double starty=0,double endx=0,double endy=0);
void setline(point,point);
double getlength() ; //计算线段长度,为求周长和面积准备
//取值函数
point getstartpoint(){return startpoint;}
point getendpoint(){return endpoint;}
private:
point startpoint;
point endpoint;
};
line::line(double startx,double starty,double endx,double endy)
:startpoint(startx,starty),endpoint(endx,endy)
{
}
line::line(point start,point end)
:startpoint(start),endpoint(end) //调用point类的构造函数(重载的第二个哦)
{
}
line::line(line&line)//利用point的复制构造函数
:startpoint(line.getstartpoint()),endpoint(line.getendpoint())
{
}
line::~line()
{
}
//利用point的setpoint()函数取值
void line::setline(double startx,double starty,double endx,double endy)
//startpoint(startx,starty),endpoint(endx,endy)
{
startpoint.setpoint(startx,starty);
endpoint.setpoint(endx,endy);
}
void line::setline(point start,point end)
//:能用否?是否只能在构造函数中使用啊?
{
startpoint.setpoint(start);
endpoint.setpoint(end);
}
double line::getlength()
{
double x1=startpoint.getx();//在line类中使用pooint类的成员只能通过point的成员函数
double y1=startpoint.gety();
double x2=endpoint.getx();
double y2=endpoint.gety();
return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
ostream &operator <<(ostream &output, line &line)
{
output<<line.startpoint<<"-->"<<line.endpoint<<".";
output<<"It's lenght is:"<<line.getlength();
return output;
}
#endif // LINE_H_INCLUDED
头文件:
polygon.h:
#ifndef POIYGON_H_INCLUDED
#define POIYGON_H_INCLUDED
#include<iostream>
#include"line.h"
#define MAX 10
class polygon
{
friend ostream&operator<<(ostream&,polygon &);
public:
polygon (point points[],int num);
~polygon();
int getnumber();
double getperimeter();
protected:
line borders[MAX];
int number;
} ;
polygon::polygon(point points[],int num)
{
number=num;
for(int i=0;i<num;i++)//对于每一条边初始化
borders[i].setline(points[i],points[(i+1)%num]);
}
polygon ::~polygon(){}
//计算周长
double polygon::getperimeter()
{
double perimeter=0.0;
for(int i=0;i<number;i++)
perimeter+=borders[i].getlength();
return perimeter;
}
//得到边数
int polygon::getnumber()
{
return number;
}
ostream &operator<<(ostream &output,polygon &polygon)
{
output<<"The ploygon has"<<polygon.number<<"borders:";
for(int i=0;i<polygon.number;i++)
output<<endl<<"\tborder["<<i<<"]:"<<polygon.borders[i];
output<<endl<<"\tIts perimeter is:"<<polygon.getperimeter()<<endl;
return output;
}
#endif // POIYGON_H_INCLUDED
头文件:
rectangle.h:
#ifndef POIYGON_H_INCLUDED
#define POIYGON_H_INCLUDED
#include<iostream>
#include"line.h"
#define MAX 10
class polygon
{
friend ostream&operator<<(ostream&,polygon &);
public:
polygon (point points[],int num);
~polygon();
int getnumber();
double getperimeter();
protected:
line borders[MAX];
int number;
} ;
polygon::polygon(point points[],int num)
{
number=num;
for(int i=0;i<num;i++)//对于每一条边初始化
borders[i].setline(points[i],points[(i+1)%num]);
}
polygon ::~polygon(){}
//计算周长
double polygon::getperimeter()
{
double perimeter=0.0;
for(int i=0;i<number;i++)
perimeter+=borders[i].getlength();
return perimeter;
}
//得到边数
int polygon::getnumber()
{
return number;
}
ostream &operator<<(ostream &output,polygon &polygon)
{
output<<"The ploygon has"<<polygon.number<<"borders:";
for(int i=0;i<polygon.number;i++)
output<<endl<<"\tborder["<<i<<"]:"<<polygon.borders[i];
output<<endl<<"\tIts perimeter is:"<<polygon.getperimeter()<<endl;
return output;
}
#endif // POIYGON_H_INCLUDED
main函数:
输出信息:
#include <iostream>
#include"rectangle.h"
using namespace std;
int main()
{
point p1(3.0,3.5);
point p2(6.5,5.5);
cout<<"P1:"<<p1<<endl;
cout<<"P2:"<<p2<<endl;
cout<<endl;
line l1(p1,p2);
line l2(1.0,2.0,4.5,5.0);
cout<<"L1:"<<l1<<endl;
cout<<"L2:"<<l2<<endl;
cout<<endl;
//声明并输出一个5边行
point points5[5];
points5[0].setpoint(0,0);
points5[1].setpoint(0,1);
points5[2].setpoint(1,2);
points5[3].setpoint(2.5,2);
points5[4].setpoint(2,0.5);
polygon ply(points5,5);
cout<<"Ply:"<<ply<<endl;
cout<<endl;
//声明并输出一个矩形
point points4[4];
points4[0].setpoint(1,1);
points4[1].setpoint(3,1);
points4[2].setpoint(3,3);
points4[3].setpoint(1,3);
rectangle rect(points4);
cout<<"rectangle:"<<rect<<endl;
return 0;
}
结果: