通过Point类和Triangel类实现三角形面积的计算

通过Point类和Triangel类实现三角形面积的计算参考 难点 1 在计算距离的时候 在 Triangel 类中 使用 P1 dis p2 是错误的 因为定义的 Point p1 是一个对象的变量 这时候不是一个对象的常量 所有没有进行转换 但是此时调用友元函数计算是可以实现的

大家好,我是讯享网,很高兴认识大家。

参考:

                                      
讯享网

难点1:

在计算距离的时候,在Triangel类中,使用P1.dis(p2)是错误的,因为定义的Point p1是一个对象的变量,这时候不是一个对象的常量,所有没有进行转换,但是此时调用友元函数计算是可以实现的,应为友元函数只是传参的因素,同时采用  Point getPoint1()const { return p1;} 也是将常量转换为变量,这时候就可以计算了。

参考网址:https://blog.csdn.net/superinzaghi747/article/details/

难点2:初始化过程中,不能访问到Point类的私有成员,所以要通过Point类中的Set成员函数完成初始化工作

项目目录:

                                                                   

(1)主函数main.cpp

 #include "triangel.h" #include "iostream" using namespace std; int main(int argc,char *argv[]) { Point p1(0,0),p2(0,5),p3(5,0); Triangel A(p1,p2,p3); //这是一种初始化方式 ,通过point类进行初始化 cout << "The area of triangel is:"<<A.GetArea() <<endl; Triangel B(0,0,0,5,5,0); //这是另外一种初始化方式 cout << "The area of triangel is:"<<B.GetArea() <<endl; return 0; }

讯享网

(2)头文件:point.h triangle.h

  1.point.h

讯享网#ifndef POINT_H_INCLUDED #define POINT_H_INCLUDED //定义一个point类 class Point { public: Point(float x=0,float y=0):x(x),y(y){} //缺省的构造函数,该函数可以表示缺省的情况,也可以表示带参数的情况 //Point(int newx,int newy):x(newx),y(newy){}; //含参数的构造函数 Point(const Point & p); //复制构造函数 ~Point(){ }; //以下为成员函数 float GetX() const {return x;} //获取值 float GetY() const {return y;} void SetX(float newx){x=newx;} //设置私有成员数据,不是构造函数,不能通过初始化成员列表进行赋值void SetX(float newx):x(newx){} void SetY(float newy){y = newy;} friend float dis_F( Point A , Point B) ; //通过友元函数进行计算两点距离 float dis( Point B) ; //通过成员函数计算两点距离 private: float x,y; }; #endif

2. triangle.h

#ifndef TRIANGLE_H_INCLUDED #define TRIANGLE_H_INCLUDED #include "point.h" //triangel类的成员函数类包含Point类 class Triangel { public: Triangel(){}; //无参的构造函数 point自己可以初始化,调用无参的构造函数 Triangel(Point newp1,Point newp2,Point newp3):p1(newp1),p2(newp2),p3(newp3){} //含参数的构造函数 Triangel(float x1,float y1,float x2,float y2,float x3,float y3); //不通过Point类,直接进行初始化 Triangel(const Triangel & p); //复制构造函数 ~Triangel(){}; //以下是成员函数 Point getPoint1() const{ return p1; } Point getPoint2() const { return p2; } Point getPoint3() const { return p3; } void setPoint1( Point point1 ) { p1=point1; } void setPoint2( Point point2 ) { p2=point2; } void setPoint3( Point point3 ) { p3=point3; } float GetArea()const ; //求取定义三角形的面积 private: Point p1,p2,p3; //定义三个点 }; #endif

(3) source Files 

1.point.cpp

讯享网#include "point.h" #include "cmath" Point::Point(const Point & p) { x =p.x; y = p.y; } float dis_F( Point A , Point B) //友元函数 { float disAB = sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)); return disAB; } float Point::dis( Point B) //成员函数 { float xx = (B.x - x)*(B.x - x); float yy = (B.y - y)*(B.y - y); return sqrt(xx+yy); }

2.triangel.cpp

 #include "triangel.h" #include "cmath" Triangel::Triangel(float x1,float y1,float x2,float y2,float x3,float y3) { /*这些初始化是不可以的,因为在类Triangel中是不能直接访问P1.x,除非声明是友元类 p1.x =x1; p1.y =y1; p2.x =x2; p2.y = y2; p3.x = x3; p3.y = y3; */// cannot access private member declared in class 'Point' p1.SetX(x1); p1.SetY(y1); p2.SetX(x2); p2.SetY(y2); p3.SetX(x3); p3.SetY(y3); } Triangel::Triangel(const Triangel & p) //复制构造函数 { p1 = p.p1; p2 = p.p2; p3 = p.p3; } float Triangel::GetArea() const//求取定义三角形的面积 { //float endge1 = p1.Point::dis(p2); //这样去写为什么会报错误呢???将非常量const 转换为了常量,这时候,getPoint1()const 为什么可以??? float edge1 = getPoint1().dis(p2); //点p1到p2的距离,采用成员函数计算 float edge2 = dis_F(p2,p3); // //点p2到p3的距离,采用友元函数计算 float edge3 = getPoint3().dis(p1); float half = (edge1+edge2+edge3)/2; float area = sqrt(half*(half-edge1)*(half-edge2)*(half-edge3)); return area; }

 

小讯
上一篇 2025-04-07 12:22
下一篇 2025-02-07 19:28

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54558.html