c++求两点的距离利用友元_用c++定义两个坐标点,计算两点间距离;进而计算线段的面积...

//本程序有三个层次

//第一层(define_class.h):构造坐标点类,颜色和宽度的结构体,线段类

//第二层(function.h):对上一层声明的函数进行定义

//第三层(distance.cpp):用类定义对象并初始化对象,对结果进行测试

define_class.h

#if!defined(define_class_H)

#define define_class_h

#include

#include

using namespace std;

//定义坐标点类

class Point

{

private:

double X,Y; //横坐标、纵坐标作为私有变量

public:

Point(double=0,double=0); //构造函数

Point(Point &); //复制的构造函数

void Display() //显示坐标点

{

cout<

}

double Distance(Point &); //两点间距离的函数,参数是点类的引用,也可以用友元函数

int getX()

{

return X; //得到横坐标的值

}

int getY()

{

return Y; //得到纵坐标的值

}

};

struct Cow //color和width,结构体,结构体内的变量是public的

{

int Color;

int Width;

};

class Line //定义线段类

{

private:

Point a,b; //线段类的私有数据成员是点类的对象

Cow cw; //线段有颜色和宽度

public:

Line(Point &,Point &,Cow &); //线段的构造函数,由两个点、颜色和宽度构成

void Display();

Line(Line &); //复制的构造函数

double Distance(); //两点间的距离

double Area(); //线段的面积

};

#endif

function.h

#if!defined(function_H)

#define function_H

#include "define_class.h" //包含头函数

Point::Point(double a,double b) //定义构造函数,前面的头函数中仅仅声明了函数

{

X=a;

Y=b;

}

Point::Point(Point &a) //定义复制的构造函数

{

X=a.X;

Y=a.Y;

}

double Point::Distance(Point &a) //求两点间的距离

{

double dis;

dis=sqrt((X-a.X)*(X-a.X)+(Y-a.Y)*(Y-a.Y));

return dis;

}

Line::Line(Point &a1,Point &a2,Cow &a3):a(a1),b(a2),cw(a3) //给Line的私有变量初始化

{ //对象间的初始化,因此需要复制的构造函数

}

Line::Line(Line &s) //定义复制的构造函数

{

a=s.a;

b=s.b;

cw=s.cw;

}

void Line::Display() //显示线段

{

a.Display();

b.Display();

cout<

}

double Line::Distance()

{

double x,y;

x=a.getX()-b.getX();

y=a.getY()-b.getY();

return sqrt(x*x+y*y);

}

double Line::Area()

{

return cw.Width * Distance();

}

#endif

distance.cpp

#include

#include

#include "function.h"

using namespace std;

void main()

{

Point a;

Point b(8.9,9.8),c(34.5,67.8);

a=c;

a.Display();

b.Display();

cout<

Cow cw={3,5};

Line s(a,b,cw);

Line s1(s);

s1.Display();

cout<

cout<

}

标签:Point,double,线段,c++,计算,Line,cw,Display,构造函数

来源: https://www.cnblogs.com/duanqibo/p/11096455.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值