首页 > 编程语言 >c++打卡第二十八天

c++打卡第二十八天

时间:2023-05-16 19:22:31浏览次数:38  
标签:Cylinder 第二十八 Point double c++ run const 打卡 Circle

一、以圆类Circle及立体图形类Solid为基础设计圆柱类Cylinder

1、题目描述

以点类Point及平面图形类Plane为基类公有派生圆类Circle,再以圆类Circle及立体图形类Solid为基类公有派生圆柱类Cylinder,main(void)函数完成对圆柱类Cylinder的测试。

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用于计算平面图形的面积

Solid类结构说明:

Solid类的成员函数包括:
①纯虚函数virtual double volume()const用于计算立体图形的体积
②纯虚函数virtual double s_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用于计算圆的周长

Cylinder类结构说明:

公有派生圆柱类Cylinder以圆类Circle、立体图形类Solid为基类,Cylinder类的结构说明如下:
Cylinder类的数据成员包括:
①基圆继承自Circle类
②私有数据成员:高度 height(double型)
Cylinder类成员函数包括:
①有参构造函数Cylinder(double, double, double, double)和拷贝构造函数Cylinder(const Cylinder &),其中有参构造函数参数包括基圆圆心坐标、半径和高度,基圆调用Circle类构造函数进行构造,各参数默认值为0,输出信息“Cylinder Constructor run”,拷贝构造函数输出信息“Cylinder CopyConstructor run”
②析构函数,析构函数输出信息“Cylinder Destructor run”
③重载void show()const用于显示圆柱的信息,显示格式为:
Cylinder(Circle(Point(<球心X坐标>,<球心Y坐标>),Radius=<半径>),Height=<高度>)
④重载double s_Area()const用于计算圆柱的面积
⑤重载double volume()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();                      /*析构函数*/
    void setX(double xv);          /*设置X坐标*/
    void setY(double yv);          /*设置Y坐标*/
    double getX()const;            /*获取X坐标*/
    double getY()const;            /*获取Y坐标*/
    virtual void show()const;      /*显示*/
};
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::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;
}
void Point::show()const{/*显示*/
    cout<<"Point(X="<<x<<",Y="<<y<<")";
}
//平面图形类Plane
class Plane{
public:
    virtual double length()const=0;/*周长*/
    virtual double area()const=0;  /*面积*/
};
//立体图形类Solid
class Solid{
public:
    virtual double volume()const=0;/*体积*/
    virtual double s_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;
}

void volumn(Solid *s){/*立体图形的体积函数*/
    cout<<"Volumn="<<s->volume()<<endl;
}
void s_Area(Solid &s){/*立体图形的表面积函数*/
    cout<<"S_Area="<<s.s_Area()<<endl;
}
//主函数
int main(void){
    double  h;
    cin>>h;
    Cylinder cy1(1,2,3,4),cy2(cy1);
    show(&cy1);
    cout<<endl;
    area(cy1);
    length(&cy1);
    s_Area(cy1);
    volumn(&cy1);
    cy2.setH(h);
    show(&cy2);
    cout<<endl;
    area(cy2);
    length(&cy2);
    s_Area(cy2);
    volumn(&cy2);
    return 0;
}

输入样例:

1.0

输出样例:

Point Constructor run
Circle Constructor run
Cylinder Constructor run
Point CopyConstructor run
Circle CopyConstructor run
Cylinder CopyConstructor run
Cylinder(Circle(Point(X=1,Y=2),Radius=3),Height=4)
Area=28.2743
Length=18.8495
S_Area=131.947
Volumn=113.097
Cylinder(Circle(Point(X=1,Y=2),Radius=3),Height=1)
Area=28.2743
Length=18.8495
S_Area=75.3982
Volumn=28.2743
Cylinder Destructor run
Circle Destructor run
Point Destructor run
Cylinder Destructor run
Circle Destructor run
Point Destructor run

2、代码实现

# define PI 3.14159
class Circle:public Point,public Plane {
    private:
        double radius;
    public:
        Circle(double x=0,double y=0,double r=0):Point(x,y),radius(r) {
            cout<<"Circle Constructor run"<<endl;
        }
        Circle(const Circle & p):Point(p) {
            radius=p.radius;
            cout<<"Circle CopyConstructor run"<<endl;
        }
        ~Circle() {
            cout<<"Circle Destructor run"<<endl;
        }
        void setR(double r) {
            radius=r;
        }
        double getR()const {
            return radius;
        }
        void show()const {
            cout<<"Circle(Point(X="<<getX()<<",Y="<<getY()<<"),Radius="<<radius<<")";
        }
        double area()const {
            return PI*radius*radius;
        }
        double length()const {
            return 2*PI*radius;
        }
} ;
class Cylinder:public Circle,public Solid
{
    private:
        double height;
        public:
            Cylinder(double x=0, double y=0, double r=0, double h=0):Circle(x,y,r),height(h)
            {
                cout<<"Cylinder Constructor run"<<endl;
            }
            Cylinder(const Cylinder &p):Circle(p)
            {
                height=p.height;
                cout<<"Cylinder CopyConstructor run"<<endl;
            }
            ~Cylinder()
            {
                cout<<"Cylinder Destructor run"<<endl;
            }
            void show()const
            {
                cout<<"Cylinder(";
                Circle::show();
                cout<<",Height="<<height<<")";
            }
            double s_Area()const
            {
                return (2*area()+(length()*height));
            }
            double volume()const
            {
                return (area()*height);
            }
            void setH(double h)
            {
                height=h;
            }
            double getH()
            {
                return height;
            }
};

3、代码实现

 

标签:Cylinder,第二十八,Point,double,c++,run,const,打卡,Circle
From: https://www.cnblogs.com/zzqq1314/p/17406564.html

相关文章

  • 2023.5.16编程一小时打卡
    一、问题描述:给出下面的多边形基类框架:classpolygon{protected:intnumber;//边数,最多不超过100条边private:intside_length[100];//边长数组public:polygon();//构造函数根据需要重载intperimeter();//计算多边形边长voiddisplay();//输出多边形边......
  • 第25天打卡
    问题: 源代码:#include<stdio.h>intmain(){inti,t=0,k;inta[3]={0};for(i=2;i<=1000;i++){k=i;while(k){a[t]=k%10;k=k/10;t++;}if(i==a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2])printf("%d",i);}printf("\n");}......
  • 编程打卡:C语言程序设计
    #include<iostream>#include<iomanip>usingnamespacestd;classMatrix{private:introw;intcolumn;int**mat=nullptr;public:Matrix(intr=1,intc=1):row(r),column(c){mat=newint*[row];f......
  • c++ - 为什么要在构造函数上使用 constexpr?
    我知道 constexpr 允许您在编译时将对象用作常量,但是什么时候这会有益呢?我试图更好地理解关键字,但我找不到一个很好的例子来解释为什么需要它的构造函数。下面的两个例子都有效,那么为什么要将constexpr放在构造函数上呢?在构造函数上使用constexpr:#include<iostream>us......
  • C++随笔:内联(inline)
    内联(inline)    内联函数以牺牲源文件大小为代价减小程序运行的时间,内联函数类似于一种编译器控制的复制/粘贴功能,当一个函数内部逻辑执行的消耗要远小于函数调用本身的消耗时,会额外增加栈空间的消耗,而被标记为内联的函数,编译器会直接将函数的定义“粘贴”到代码的调用处,直接......
  • C++
    计算时间相减定义一个时间类,小时和分钟是其两个私有成员数据。输入一个起始时间和一个结束时间(起始时间早于结束时间),通过运算符重载-(减号),计算这两个时间相隔多少分钟。说明:这两个时间在同一天之内,且采用24小时计时分式,即从00:00-23:59。输入格式:测试输入包含若干测试用例,每个......
  • C++:全局变量和static变量初始化
    (一)全局变量全局变量、文件域中的静态变量、类中的成员静态变量在main函数执行前初始化;局部变量中的静态变量在第一次调用时初始化。C++保证,全局变量在main函数第一次使用它之前,就把它初始化好。(可以直接理解成在main函数执行前就初始化好)但这个初始化可细分为:编译时初始化和运......
  • c++输入输出流对象
    实验项目名称:输入输出流一、实验目的掌握文本文件和二进制文件的基本访问方法;了解一般I/O流和文件流的关系;了解文件与文件流的关系;了解文件系统的概念,包括文件指针和关于文件的操作;掌握文件类的定义和相关操作的定义、使用方法;掌握利用常用函数进行文件的打开、关闭、读写......
  • c++打卡练习(31)
    求两个整数的最大公因数流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ intx,y,i,k; cout<<"请输入两个整数"<<endl; cin>>x; cin>>y; if(x<y){ intt; t=x; x=y; y=t; } for(i=y;i>=1;i--){ if(x%i==0&&y%i=......
  • c++打卡练习(30)
    不重复的三位数用1234这四个数组成不重复的三位数,每个数位的数也不同,问都有谁流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ inta,b,c,d; for(a=1;a<=4;a++){ for(b=1;b<=4;b++){ for(c=1;c<=4;c++){ if(a!=b&&a!=c&&b!=c){ cout<<a&......