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

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

时间:2023-05-04 19:46:07浏览次数:33  
标签:第十八天 const Point double 每日 Circle 打卡 void 构造函数

一.问题描述

6-2 【CPP0025】以点类Point及平面图形类Plane为基础设计圆类Circle、

以点类Point及平面图形类Plane为基类公有派生圆类Circle,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用于计算平面图形的面积
 

Circle类结构说明:

 
公有派生圆类Circle以点类Point、平面图形类Plane为基类,Circle类的结构说明如下:
Circle类的数据成员包括:
①圆心坐标继承自Point类
②保护静态数据常量PI(double型),其值为3.14159
③私有数据成员:半径radius(double型)。
Circle类成员函数包括:
①有参构造函数Circle(double, double, double)和拷贝构造函数Circle(const Circle &),其中有参构造函数参数包括圆心坐标和半径,圆心调用Point类构造函数进行构造,各参数默认值为0,输出信息“Circle Constructor run”,拷贝构造函数输出信息“Circle CopyConstructor run”
②析构函数,析构函数输出信息“Circle Destructor run”
③公有函数成员void setR(double)和double getR()const分别返回和设置radius
④重载void show()const用于显示圆的信息,显示格式为:
Circle(Point(<圆心X坐标>,<圆心Y坐标>),Radius=<半径>)
⑤重载double area()const用于计算圆的面积
⑥重载double length()const用于计算圆的周长
 

裁判测试程序样例:

 
#include <iostream>
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 show(Point *p){/*点基类的显示函数*/
    p->show();
}
void length(Plane *p){/*平面图形的周长函数*/
    cout<<"Length="<<p->length()<<endl;
}
void area(Plane &p){/*平面图形的面积函数*/
    cout<<"Area="<<p.area()<<endl;
}
//主函数
int main(void){
    double x,y,r;
    Circle c1,c2(c1);
    show(&c1);
    cout<<endl;
    area(c1);
    length(&c1);
    cin>>x>>y>>r;
    c2.setX(x);
    c2.setY(y);
    c2.setR(r);
    show(&c2);
    cout<<endl;
    area(c2);
    length(&c2);
}
 

输入样例:

1.0 2.0 3.0

二.设计思路

该实验题考察的是虚函数类问题,通过基类的指针或别名只能调用派生类的同名函数

三.代码实现

#include <iostream>
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;  /*面积*/
};

class Circle :public Point, public Plane
{
protected:
    static double PI;
private:
    double radius;
public:
    Circle(double x1 = 0, double y1 = 0, double r1 = 0);
    Circle(const Circle& p);
    ~Circle();
    void setR(double r1);
    double getR()const;
    void show()const;
    double area()const;
    double length()const;
};
double Circle::PI = 3.14159;
Circle::Circle(double x1, double y1, double r1) :radius(r1), Point(x1, y1)
{
    cout << "Circle Constructor run" << endl;
}
Circle::Circle(const Circle& p) :Point(p)
{
    radius = p.getR();
    cout << "Circle CopyConstructor run" << endl;
}
Circle::~Circle()
{
    cout << "Circle Destructor run" << endl;
}
void Circle::setR(double r1)
{
    radius = r1;
}
double Circle::getR()const
{
    return radius;
}
void Circle::show()const
{
    cout << "Circle(Point(X=" << getX() << ",Y=" << getY() << "),Radius=" << radius << ")" << endl;
}
double Circle::area()const
{
    return PI * radius * radius;
}
double Circle::length()const
{
    return PI * 2 * radius;
}

void show(Point* p) {/*点基类的显示函数*/
    p->show();
}
void length(Plane* p) {/*平面图形的周长函数*/
    cout << "Length=" << p->length() << endl;
}
void area(Plane& p) {/*平面图形的面积函数*/
    cout << "Area=" << p.area() << endl;
}
//主函数
int main(void) {
    double x, y, r;
    Circle c1, c2(c1);
    show(&c1);
    cout << endl;
    area(c1);
    length(&c1);
    cin >> x >> y >> r;
    c2.setX(x);
    c2.setY(y);
    c2.setR(r);
    show(&c2);
    cout << endl;
    area(c2);
    length(&c2);
}

 

标签:第十八天,const,Point,double,每日,Circle,打卡,void,构造函数
From: https://www.cnblogs.com/zhenaifen/p/17372287.html

相关文章

  • 天天打卡一小时——8
    一问题描述 二设计思路将空白处补充完整,实现程序的可运行三 代码实现#include<iostream>usingnamespacestd;classComplex{public:Complex(doubler=0,doublei=0):real(r),imag(i){}Complexoperator+(Complexc)const;//重载双目运算符'+'Complexoperator-=(......
  • 第13天打卡
    问题: 算法设计:第j次卖出余下的(j+1)分之一加1/(j+1),第四次买完后剩下11条假设第j次前还剩下x条所以x+1必定处尽j+1x从23开始取,一直加2代码:#include<stdio.h>intmain(){inti,j,x,flag=0;for(i=23;flag==0;i+=2){for(j=1,x=i;j<=4&&x>=11;j++)if((x+1)%(j+1)==0)x-=......
  • 建民打卡日记5.4
    一、问题描述划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。下面给出甲、乙两人的......
  • [每日一个小技巧] CentOS 下使用yum安装一类软件包
    yum提供了丰富的工具用于支持软件包的安装。有时候需要安装不只只是一个的情况下,可以使用groupinstall选项。首先可以通过grouplist查询对应的group信息,比如需要安装开发工具的情况下,可以使用以下命令:$yumgroupinstall  "DevelopmentTools"......
  • 周四打卡
    问题描述:本题要求输入一个字符串,判断该字符串是否为回文串。如果该字符串是回文串,则输出YES,否则输出NO。保证字符串长度小于1000。设计思路:首先需要从用户处获取输入的字符串,然后对该字符串进行遍历,将其逆序存储并与原字符串进行比较,如果两者相等则该字符串为回文串,否则不是。......
  • 打卡7
    样例解析:就是相当于找该位置到上下左右边界的最短距离···importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);while(true){intn=sc.nextInt();i......
  • C++打卡第十八天
    一、问题描述。一个口袋中装有12个球,三个红的,三个白的,六个黑的,现在从中取八个,问有多少种取法。二、设计思路①、我们可以通过定义三个变量,应用循环结构依次遍历可以出现的情况。②、颜色相同的小球大小形状是相同的,那么在相同颜色中选球就是和顺序无关。③、可以通过用所拿出的总......
  • 5.4打卡
    #include<bits/stdc++.h>usingnamespacestd;unsignedfac(unsignedn){unsignedf;if(n==0)f=1;elsef=fac(n-1)*n;returnf;}intmain(){unsignedn;cout<<"Enterapositiveinteger:";cin>......
  • [Week 19]每日一题(C++,数学,并查集,动态规划)
    目录[Daimayuan]T1倒数第n个字符串(C++,进制)输入格式输出格式样例输入样例输出解题思路[Daimayuan]T2排队(C++,并查集)输入格式输出格式样例输入1样例输出1样例输入2样例输出2样例输入3样例输出3数据规模解题思路[Daimayuan]T3素数之欢(C++,BFS)数据规模输入格式输出格式样例输入样......
  • 每日总结2023-05-03
    今天学习了Android中的数据传递: 发送://实例化一个新的窗口,并指定从那个窗口到哪个窗口intent=newIntent(MainActivity.this,secondwindow.class);//将数据发送到intent中intent.putExtra("name",ed_text.getText().toString().trim());//启动新窗口startActivity(in......