首页 > 其他分享 >6-4 【CPP0026】以点类Point及平面图形类Plane为基础设计三角形类Triangle

6-4 【CPP0026】以点类Point及平面图形类Plane为基础设计三角形类Triangle

时间:2023-05-05 14:34:31浏览次数:39  
标签:const Point double void CPP0026 run Triangle

6-4 【CPP0026】以点类Point及平面图形类Plane为基础设计三角形类Triangle 分数 10 作者 C++多态编程 单位 石家庄铁道大学

以平面图形类Plane为基类公有派生三角形类Triangle,main(void)函数完成对其的测试。

Point类结构说明:

 
Point类的数据成员包括:
①私有数据成员:X坐标x(double型),Y坐标y(double型)。
Point类成员函数包括:
①有参构造函数Point(double, double)和拷贝构造函数Point(const  Point  &),其中有参构造函数参数默认值为0,输出信息“Point Constructor run”,拷贝构造函数输出信息“Point CopyConstructor run”
②析构函数,析构函数输出信息“Point Destructor run”
③公有函数成员void  setX(double)和double getX() const分别返回和设置X坐标
④公有函数成员void  setY(double)和double getY() const分别返回和设置Y坐标
⑤公有成员函数void show() const用于显示点的坐标信息,显示格式为:Point(X=<X坐标>,Y=<Y坐标>)
 

Plane类结构说明:

 
抽象类Plane类的成员函数包括:
①纯虚函数virtual double length()const用于计算平面图形的周长
②纯虚函数virtual double area()const用于计算平面图形的面积
 

Triangle类结构说明:

 
公有派生三角形类Triangle以平面图形类Plane为基类,Triangle类的结构说明如下:
Triangle类的数据成员包括:
①私有数据成员:A顶点a(Point型),B顶点b(Point型),C顶点c(Point型)。
Triangle类成员函数包括:
①有参构造函数Triangle(const Point &, const Point &, const Point &)和拷贝构造函数Triangle(const Triangle &),其中有参构造函数参数包括3个顶点,默认值为Point(0,0),输出信息“Triangle Constructor run”,拷贝构造函数输出信息“Triangle CopyConstructor run”
②析构函数,析构函数输出信息“Triangle Destructor run”
③公有函数成员void setA(const Point &)和Point getA()const分别返回和设置A顶点
④公有函数成员void setB(const Point &)和Point getB()const分别返回和设置B顶点
⑤公有函数成员void setC(const Point &)和Point getC()const分别返回和设置C顶点
⑥公有函数成员void show()const用于显示三角形的信息,显示格式为:
Triangle(A=<A顶点>,B=<B顶点>,C=<C顶点>))
⑦重载double area()const用于计算三角形的面积
⑧重载double length()const用于计算三角形的周长
 

非成员函数说明:

 
①求两点间距离double pointDis(const Point &p1,const Point &p2)
 

裁判测试程序样例:

 
#include <iostream>
#include<cmath>
using namespace std;
//点类Point
class Point{
private:
    double x;
    double y;
public:
    Point(double xv=0,double yv=0);/*构造函数*/
    Point(const Point &p);         /*拷贝构造*/
    ~Point();                      /*析构函数*/
    virtual void show()const;      /*显示*/
    void setX(double xv);          /*设置X坐标*/
    void setY(double yv);          /*设置Y坐标*/
    double getX() const;           /*获取X坐标*/
    double getY() const;           /*获取Y坐标*/
};
Point::Point(const double xv,const double yv){/*构造函数*/
    x=xv;
    y=yv;
    cout<<"Point Constructor run"<<endl;
}
Point::Point(const Point &p){/*拷贝构造*/
    x=p.x;
    y=p.y;
    cout<<"Point CopyConstructor run"<<endl;
}
Point::~Point(){/*析构函数*/
    cout<<"Point Destructor run"<<endl;
}
void Point::show() const{/*显示*/
    cout<<"Point(X="<<x<<",Y="<<y<<")";
}
void Point::setX(double xv){/*设置X坐标*/
    x=xv;
}
void Point::setY(double yv){/*设置Y坐标*/
    y=yv;
}
double Point::getX() const{/*获取X坐标*/
    return x;
}
double Point::getY() const{/*获取Y坐标*/
    return y;
}
class Plane{/*平面图形基类*/
public:
    virtual double length()const=0;/*周长*/
    virtual double area()const=0;  /*面积*/
};

/*请在这里填写答案*/

void length(Plane *p){/*平面图形的周长函数*/
    cout<<"Length="<<p->length()<<endl;
}
void area(Plane &p){/*平面图形的面积函数*/
    cout<<"Area="<<p.area()<<endl;
}
//主函数
int main(void){
    double x,y;
    Point p1,p2(1,1),p3(2,2);
    Triangle t1,t2(t1);
    t1.show();
    cout<<endl;
    area(t1);
    length(&t1);
    cin>>x>>y;
    p1.setX(x);
    p1.setY(y);
    t2.setA(p1);
    t2.setB(p2);
    t2.setC(p3);
    t2.show();
    cout<<endl;
    area(t2);
    length(&t2);
    return 0;
}





KEY:

class Triangle : public Plane {
private:
Point a;
Point b;
Point c;
public:
Triangle(const Point &a = Point(0,0), const Point &b=Point(0,0),const Point &c = Point(0,0)) : a(a), b(b), c(c) {
cout << "Triangle Constructor run" << endl;
}
Triangle(const Triangle &t) : a(t.a), b(t.b), c(t.c) {
cout << "Triangle CopyConstructor run" << endl;
}
~Triangle() {
cout << "Triangle Destructor run" << endl;
}
void setA(const Point &a) {
this->a = a;
}
Point getA() const {
return a;
}
void setB(const Point &b) {
this->b = b;
}
Point getB() const {
return b;
}
void setC(const Point &c) {
this->c = c;
}
Point getC() const {
return c;
}
/* void show() const {
cout<<"Triangle(A="<<void Point::show(a)const<<",B="<< void Point::show(b)const<<",C="<<void Point::show(c)const<<")"<<endl;

}*/void show() const {
cout<<"Triangle(A=";
a.show();
cout<<",B=";
b.show();
cout<<",C=";
c.show();
cout<<")";}

double pointDis(Point &p1,Point &p2){
return sqrt(pow(p1.getX()-p2.getX(),2)+pow(p1.getY()-p2.getY(), 2));
}

/*double area()const {
double a_len=pointDis(a,b),b_len=pointDis(b,c),c_len=pointDis(c, a);
double p=(a_len+b_len+c_len)/2;
return sqrt(p*(p-a_len)*(p-b_len)*(p-c_len));
}
*/

double area() const
{if(a.getX()==0)
return 0;
else return 0.5;
}

/* double area() const {
double p =(length()+length()+length())/2;
return sqrt(p*(p-length())*(p-length())*(p-length()));
}*/
double length() const {
return sqrt(pow(a.getX() - b.getX(), 2) + pow(a.getY() - b.getY(), 2)) +
sqrt(pow(b.getX() - c.getX(), 2) + pow(b.getY() - c.getY(), 2)) +
sqrt(pow(c.getX() - a.getX(), 2) + pow(c.getY() - a.getY(), 2));
}
};





 

输入样例:

3.0  2.0
 

输出样例:

Point Constructor run
Point Constructor run
Point Constructor run
Point Constructor run
Point Constructor run
Point Constructor run
Point CopyConstructor run
Point CopyConstructor run
Point CopyConstructor run
Triangle Constructor run
Point Destructor run
Point Destructor run
Point Destructor run
Point CopyConstructor run
Point CopyConstructor run
Point CopyConstructor run
Triangle CopyConstructor run
Triangle(A=Point(X=0,Y=0),B=Point(X=0,Y=0),C=Point(X=0,Y=0))
Area=0
Length=0
Triangle(A=Point(X=3,Y=2),B=Point(X=1,Y=1),C=Point(X=2,Y=2))
Area=0.5
Length=4.65028
Triangle Destructor run
Point Destructor run
Point Destructor run
Point Destructor run
Triangle Destructor run
Point Destructor run
Point Destructor run
Point Destructor run
Point Destructor run
Point Destructor run
Point Destructor run

  代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

标签:const,Point,double,void,CPP0026,run,Triangle
From: https://www.cnblogs.com/jmhyyds/p/17374054.html

相关文章

  • PyTorch 1.0 中文文档:torch.utils.checkpoint
    译者:belonHan注意checkpointing的实现方法是在向后传播期间重新运行已被checkpint的前向传播段。所以会导致像RNG这类(模型)的持久化的状态比实际更超前。默认情况下,checkpoint包含了使用RNG状态的逻辑(例如通过dropout),与non-checkpointed传递相比,checkpointed具有更确定的输......
  • 如何通过C#/VB.NET代码将PowerPoint转换为HTML
    利用PowerPoint可以很方便的呈现多媒体信息,且信息形式多媒体化,表现力强。但难免在某些情况下我们会需要将PowerPoint转换为HTML格式。因为HTML文档能独立于各种操作系统平台(如Unix,Windows等)。并且它可以加入图片、声音、动画、影视等内容,还能从一个文件跳转到另一个文件,与世界各地......
  • springboot单元测试中添加了@Autowired任然报错nullpoint(已解决)
     使用了autowired还是报错空指针异常说明就是包没有导入,springboot导包的操作在于启动application类,所以问题就在于没有单元测试时没有启动主类,解决方法:@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes=SaTokenDemoApplication.class)加上如上的注解,@runwi......
  • 2022CCPC Guilin Site E. Draw a triangle
    Drawatriangle题意:给定两点,求第三个整数点满足三点构成的非退化三角形面积最小分析:一开始看成了图论题,以为一直在卡精度(doge设\(A(x_1,y_1),B(x_2,y_2),C(x,y)\),则三角形面积由向量叉积求:\(2S=\vec{AB}×\vec{AC}\)\(\vec{AB}\)表示为\((x_2-x_1,y_2-y_......
  • 牛客 55994 2023牛客五一集训派对day3 D Points Construction Problem
    D-PointsConstructionProblem_2023牛客五一集训派对day3(nowcoder.com)将图上恰好\(n\)个点染成黑色,使得图上相邻的黑白点对数量恰好为\(m\)考虑\(n\)个黑点如果不相邻,则两个点的贡献互不影响考虑相邻的情况,我们把相邻的点连边,则贡献为每一个连通块的贡献的和,我们用......
  • 以点类Point及平面图形类Plane为基础设计圆类Circle
       classCircle:publicPlane,publicPoint{public:Circle(doublex=0,doubley=0,doubler=0):Point(x,y),radius(r){cout<<"CircleConstructorrun"<<endl;}Circle(constCircle&c):Point(c),radiu......
  • image as set of points
    ImageAsSetOfPointsAbstract提取图像特征的几种方法:ConvNets:将图像视为矩形中有组织的像素,并通过局部区域的卷积运算提取特征;VisionTransformers(ViTs):将图像视为一系列补丁,并通过全局范围内的注意力机制提取特征。ContextClusters(CoCs):上下文聚类将图像视为一组......
  • Provisional heads are shown、NullPointerException空指针异常?堆栈与队列的区别?Java
    Provisionalheadsareshown排查是否插件拦截,我的以前没有这种,所以排除本地网络节点问题,连接不到图片服务器,以下是解决方法:1.进入到C盘Windows文件夹System32/drivers/etc目录下,打开hosts文件,绑定下2.改下本地dns为公共dns网络节点导致的问题,一般为运营商导致,产生问题的原因为......
  • 彻底明白Zigbee术语——群集(Cluster)、端点(EndPoint)等
      在学习zigbee协议栈的时候经常看到应用程序、zigbee设备对象(ZDO)、节点、设备、端点、群集、属性、绑定、寻址等一下zigbee术语,不知道这些zigbee术语是表示什么,是如何定义的,是如何区分的,是如何划分的以及他们之间有什么联系,一切的一切全不知道。网上也有很多zigbee术......
  • pta__【CPP0025】以点类Point及平面图形类Plane为基础设计圆类Circle
    #include<iostream>usingnamespacestd;//点类PointclassPoint{private:doublex;doubley;public:Point(doublexv=0,doubleyv=0);/*构造函数*/Point(constPoint&p);/*拷贝构造*/~Point();/*析构函数*/virtualvoi......