南京航空航天大学c++课程设计

这是一份关于南京航空航天大学C++课程设计的实践项目,包括了point、Line、Rect、Shape等核心类的定义,并在main.cpp中进行了实现和测试。通过此设计,学生可以深入理解C++面向对象编程的概念和应用。
摘要由CSDN通过智能技术生成

point.h 

#include<iostream>
#include<math.h>
#include<string>
#include"Shape.h"
#include<string.h>
using namespace std;
class Point: public Shape
{ 
	static int count;
	float x, y;
public:
	Point(float a=0,float b=0,int o=0, string s=""):Shape(o, s), x(a),y(b){}
    Point(const Point&in):Shape(in), x(in.x),y(in.y){}
	float GetX() const{return x;}
	float GetY() const{return y;}
	float PutX (float a){x=a;}
	float PutY (float b){y=b;}
	static void fun(){count++;}
 	virtual float Area(){return 0;}
	virtual void WriteToFile(ofstream &o)
	{
		count=0;
		o<<getobj()<<"( "<<x<<","<<y<<")"<<getdes()<<endl;
		fun();
	}
	//实现任务六,将数据写入到Point2.txt里面
	//实现任务六里面的Point排序问题
	friend bool operator<(const Point& p1,const Point& p2)
	{
		if(p1.x<p2.x)
			return true;
		else if(p1.x==p2.x&&p1.y<p2.y)
			return true;
		else
			return false;
	}//判断两个Point对象的大小
	friend Point operator+(Point &p1,Point &p2)
	{
		Point p3;
		p3.x=p1.x+p2.x;
		p3.y=p1.y+p2.y;
		return p3;
	}
	friend float Distance(Point &p1,Point &p2)
	{
		double distance;
		distance=(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);
		return sqrt(distance); 
	}
	//④ 类 Point 实现成员函数 Distance_R(),求解 Point 对象和 Rect 对象之间的距离(最近的两点之间的距离);
	friend float Distance_R(Point& p,Point& r1,Point &r2)
	{
		float distancemin1,distancemin2;
		distancemin1=(p.x-r1.x)*(p.x-r1.x)+(p.y-r1.y)*(p.y-r1.y);
		distancemin2=(p.x-r2.x)*(p.x-r2.x)+(p.y-r2.y)*(p.y-r2.y);
		if(distancemin1>distancemin2)
		{
			return  sqrt(distancemin2);
		}
		else
			return sqrt(distancemin1);
	}
	//类 Point 实现成员函数 Distance_L(),求解 Point 对象和Line 对象之间的距离(最近的两点之间的距离) 	
	friend float Distance_L(Point& p,Point& r1,Point& r2)
	{
		float distancemin1,distancemin2;
		distancemin1=(p.x-r1.x)*(p.x-r1.x)+(p.y-r1.y)*(p.y-r1.y);
		distancemin2=(p.x-r2.x)*(p.x-r2.x)+(p.y-r2.y)*(p.y-r2.y);
		if(distancemin1>distancemin2)
		{
			return  sqrt(distancemin2);
		}
		else
			return sqrt(distancemin1);
	}	
};
int Point::count = 0;
ostream& operator<<(ostream &o,Point &c)
{
	o<<c.getobj()<<'\t'<<c.GetX()<<'\t'<<c.GetY()<<'\t'<<c.getdes()<<endl;
	return o;
};

 Line.h

#include<iostream>
#include<string>
#include"Rect.h"
#include<iomanip>
using namespace std;
class Line:public Shape
{
    Point p1;//左下角
    Point p2;//右上角
    double len;
    static int count;
 public:
    Line(float x1=0,float y1=0,float x2=0,float y2=0,int o=0,double l=0,string s=""):Shape(o,s),p1(x1,y1),p2(x2,y2),len(l){}
    virtual float Area(){return len;}
    float Getp1_x() const{return p1.GetX();}
    float Getp1_y() const{return p1.GetY();}
    float Getp2_x() const{return p2.GetX();}
    float Getp2_y() const{return p2.GetY();}
    Point Getp1(){return p1;}
    Point Getp2(){return p2;}
    static void fun(){count++;}
    virtual void WriteToFile(ofstream &o)
	{
        count=0;
		o<<getobj()<<setw(5)<<"("<<p1.GetX()<<","<<p1.GetY()<<")  ("<<p2.GetX()<<","<<p2.GetY()<<")     "<<len<<" "<<getdes()<<endl;
		fun();
	}
    bool operator<( const Line& in)const
	{
		if(len<in.len)
			return true;
		else
			return false;
	}
    /*friend bool operator<(Rect re1,Rect re2)
    {
        string des1,des2;
        des1=re1.getdes();
        des2=re2.getdes();
        if(des1<des2)
            return true;
        else
            return false;
    }*/
    friend float Distance (Line &l1,Line &l2)
    {
        double distancemin;
        double rdistance[5];
        rdistance[0]=(l1.Getp1_x()-l1.Getp2_x())*(l1.Getp1_x()-l1.Getp2_x())+(l1.Getp1_y()-l1.Getp1_y())*(l1.Getp1_y()-l1.Getp1_y());
        rdistance[1]=(l2.Getp1_x()-l2.Getp2_x())*(l2.Getp1_x()-l2.Getp2_x())+(l2.Getp1_y()-l2.Getp1_y())*(l2.Getp1_y()-l2.Getp1_y());
        rdistance[2]=(l1.Getp1_x()-l2.Getp2_x())*(l1.Getp1_x()-l2.Getp2_x())+(l1.Getp1_y()-l2.Getp2_y())*(l1.Getp1_y()-l2.Getp2_y());
        rdistance[3]=(l1.Getp1_x()-l2.Getp1_x())*(l1.Getp1_x()-l2.Getp1_x())+(l1.Getp1_y()-l2.Getp2_y())*(l1.Getp1_y()-l2.Getp1_y());
        rdistance[4]=(l1.Getp2_x()-l2.Getp2_x())*(l1.Getp2_x()-l2.Getp2_x())+(l1.Getp2_y()-l2.Getp1_y())*(l1.Getp2_y()-l2.Getp2_y());
        rdistance[5]=(l1.Getp2_x()-l2.Getp1_x())*(l1.Getp2_x()-l2.Getp1_x())+(l1.Getp2_y()-l2.Getp1_y())*(l1.Getp2_y()-l2.Getp1_y());
        distancemin=rdistance[0];
        for(int i=0;i<6;i++)
        {
            if(distancemin>rdistance[i])
                distancemin=rdistance[i];
            else
                continue;
        }
        return sqrt(distancemin);
    }
};
int Line::count=0;
ostream& operator<<(ostream& o,Line &c)
{
    o<<c.getobj()<<' ';
    o<<c.Getp1_x()<<' '<<c.Getp1_y()<<' '<<c.Getp2_x()<<' '<<c.Getp2_y()<<' '<<c.Area()<<endl;
}

Point.h 

#include<iostream>
#include<math.h>
#include<string>
#include"Shape.h"
#include<string.h>
using namespace std;
class Point: public Shape
{ 
	static int count;
	float x, y;
public:
	Point(float a=0,float b=0,int o=0, string s=""):Shape(o, s), x(a),y(b){}
    Point(const Point&in):Shape(in), x(in.x),y(in.y){}
	float GetX() const{return x;}
	float GetY() const{return y;}
	float PutX (float a){x=a
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值