首页 > 其他分享 >每日打卡一小时(第二十一天)

每日打卡一小时(第二十一天)

时间:2023-05-07 15:57:43浏览次数:41  
标签:const 函数 Point double 每日 第二十一 Triangle 打卡 构造函数

一.问题描述

以平面图形类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;  /*面积*/
};
double pointDis(const Point& p1, const Point& p2)
{
    return  sqrt(((p1.getX() - p2.getX()) * (p1.getX() - p2.getX())) + ((p1.getY() - p2.getY()) * (p1.getY() - p2.getY())));
}
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));
    Triangle(const Triangle& p);
    ~Triangle()
    {
        cout << "Triangle Destructor run" << endl;
    }
    void setA(const Point&);
    Point getA()const;
    void setB(const Point&);
    Point getB()const;
    void setC(const Point&);
    Point getC()const;
    void show()const;
    double area()const;
    double length()const;
};
Triangle::Triangle(const Point& A, const Point& B, const Point& C) : a(A), b(B), c(C)
{
    cout << "Triangle Constructor run" << endl;
}
Triangle::Triangle(const Triangle& p) :a(p.a), b(p.b), c(p.c)
{
    cout << "Triangle CopyConstructor run" << endl;
}
void Triangle::setA(const Point& A)
{
    a = A;
    return;
}
Point Triangle::getA()const
{
    return a;
}
void Triangle::setB(const Point& B)
{
    b = B;
    return;
}
Point Triangle::getB()const
{
    return b;
}
void Triangle::setC(const Point& C)
{
    c = C;
    return;
}
Point Triangle::getC()const
{
    return c;
}
void Triangle::show()const
{
    cout << "Triangle(A=Point(X=" << a.getX() << ",Y=" << a.getY() << "),B=Point(X=" << b.getX() << ",Y=" << b.getY() << "),C=Point(X=" << c.getX() << ",Y=" << c.getY() << "))";
}
double Triangle::area()const
{
    double p = length() / 2;
    return sqrt(p * (p - pointDis(a, b)) * (p - pointDis(a, c)) * (p - pointDis(c, b)));
}
double Triangle::length()const
{
    return pointDis(a, b) + pointDis(a, c) + pointDis(c, b);
}

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;
}

 

标签:const,函数,Point,double,每日,第二十一,Triangle,打卡,构造函数
From: https://www.cnblogs.com/zhenaifen/p/17379425.html

相关文章

  • 5月6日打卡
    例4-4题目描述:类的组合,线段类。我们使用一个类来描述线段,使用4.3节中Point类的对象来表示端点。这个问题可以用类的组合来解决,使Line类包括Point类的两个对象p1和p2,作为其数据成员。Line类具有计算线段长度的功能,在构造函数中实现。代码部分:#include<iostream>#include<cm......
  • 每日总结2023-05-06
    JavaWeb分层结构总结三层结构:数据访问层、业务逻辑层、界面层数据访问层即DAO,对数据库进行操作。业务逻辑层又称领域层、组件层。针对具体问题的操作,可理解为对DAO层的操作,对数据业务逻辑处理。界面层又称表示层。表示WEB相关的方式,在逻辑层完善的前提下,不论表示层如何更......
  • 第15天打卡
    问题:算法设计:直接暴力查找;运用多个判断语句即可源代码:#include<stdio.h>intmain(){longn,sum,i;while(scanf("%ld",&n)!=EOF){sum=0;for(i=7;i<=n;i++)if(i%7==0)if(i%6==5)if(i%5==4)if(i%3==2){sum++;printf("%ld\n",i);}printf("......
  • 每天打卡一小时 第二十天 承接十九天
    这段代码实现了两个大数相加的功能,其中BigNum是一个自定义的大数类,它的数据成员num是一个字符数组,用于存储大数。下面是对代码的解释:1.首先判断两个大数的符号,如果一个为正数,另一个为负数,则通过转换为减法的方式实现加法。2.定义一个新的BigNum对象s,用于存储相加后的结果;另外定......
  • 每日打卡
    完数问题:问题描述:一个等于因子之和的数称为完数,求一定范围内完数的数量代码:#include<stdio.h> intmain() {       inti,j,s,n;       printf("请选择输入上限:");       scanf("%d",&n);              for(i=2;i<=n;i++)  ......
  • 5.6打卡
    一、问题描述:一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少种可能的颜色搭配?二、设计思路:根据问题描述可设任取的8个球中红球为m个,白球为n个,则黑球为8-m-n个。又已知12个球中有3个红球,3个白球,6个黑球,因此,m的取值范围为[0,3],n的取值范围因此为[......
  • 每日总结 5.6
    今天发现了一个HTML的代码示例。<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>文字烟雾效果</title><style>*{margin:0;padding:0;box-sizing:border-......
  • 5.6每日总结
    <%@pageimport="wangzhan.Thesql"%><%@pageimport="wangzhan.Pd_P_assignment"%><%@pageimport="wangzhan.Pd_S_assignment"%><%@pageimport="wangzhan.Pd_lesson"%><%@pagelanguage=&......
  • 2023.5.6编程一小时打卡
    一、问题描述:键盘输入“Iamastudent./MyuniversityisSTDU./Ilovemyuniversity.”用流对象的成员函数get读取并打印到屏幕上;分别用流对象的成员函数get函数和getline函数读取第一个“/”之前的字符串,之后观察当前指针所指内容,观察是否有差别,若有,请在实验报告中描述;......
  • 5-5打卡
    '''typedefstructlist{intdata;list*next;}list;list*initlist(){list*a=newlist;a->data=0;a->next=NULL;returna;}voidpushback(list**h,intn){list*a=newlist;a->data=n;a->next=NULL;list*p=*......