首页 > 其他分享 >pta__【CPP0025】以点类Point及平面图形类Plane为基础设计圆类Circle

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

时间:2023-04-27 20:35:10浏览次数:45  
标签:__ const cout Point double void 圆类 Circle

#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 = 0.0,x = getX(),y = getY();
public:
Circle(double a = 0, double b = 0, double c = 0):Point (a,b)
{
radius = c;
cout << "Circle Constructor run" << endl;
}
Circle(const Circle& r):Point(r)
{
radius = r.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 radius * 2 * PI;
}
};
double Circle::PI = 3.14159;

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,cout,Point,double,void,圆类,Circle
From: https://www.cnblogs.com/atrue/p/17360130.html

相关文章

  • 4月27日打卡
    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输入格式:输入在一行中给出正方形边长N(3≤N≤21)和......
  • 面试题 05.03. 翻转数位
     分析:这道题看的解析过的,但是还是有点不懂这道题大概思路懂了,就是通过三个变量,遇到1或者0刷新值,然后每次取三个变量最大值但是看解析代码有一行没看懂那个&,好像是位运算的符号,还有那个代码里面的1>>i没看懂代码:1classSolution(object):2defreverseBits(self,......
  • 2023.4.27编程一小时打卡
    一、问题描述:建立一个向量容器的实例s,不断对s调用push_back向其中增加新的元素,观察在此过程中s.capacity()的变化。二、解题思路:首先,编写一个向量容器vector<int>s,利用循环对其进行不断调用push_back,再输出它的capacity()函数观察它向量容器的容量的变化。三、代码实现:1#in......
  • 配置与管理DNS服务器
    1部署DNS服务器的需求和环境。 2安装DNS服务器角色 3DNS服务器的停止和启动 4创建正向主要区域。 5创建反向主要区域。 6创建资源记录 ......
  • 【题解】P4363 [九省联考 2018] 一双木棋 chess
    原题链接题目描述菲菲和牛牛在一块\(n\)行\(m\)列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手。棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束。落子的规则是:一个格子可以落子当且仅当这个格子内没有棋子且这个格子的左侧及上方的所有格子内都有棋......
  • 12
     #include<stdio.h>voidprint(ints[]);intjudge(intc[]);intj=0;intmain(){intsweet[10]={10,2,8,22,16,4,10,6,14,20};inti,t[10],l;printf("child12345678910\n");print(sweet);while(judge(sweet)){for(i=0;......
  • 运算符重载
    一.问题描述:请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。输入:第一行的两个数分别表示第一个分数的分子和分母(分母不为0)。第二行的两个数分别表示第二个......
  • 压缩数组
    443:双指针短除法:while(num>0){char[i]='0'+num%10;num/=10;}要与之后的字符串进行比较,因为之后的字符串才是没有被改动过。所以:chars[i]==cahrs[i+1]因为与之后的字符串比较,所以要从0开始。如果字符串出现不等,就将字符串记录入原字符串,再将哨兵后移;继续输入长度num如原......
  • day03
    1、盒子模型。padding:内容到边框之间的间距,称为内边距或者内留白。margin:盒子和盒子之间的间距称为外边距也称为外留白。2、四种写法3、(重点)特点:在块元素四个方向都有效,在行内元素水平方向左右有效,垂直方向上下无效。应用:可以让块级元素水平居中(1、盒子必须设置宽度。2、......
  • service
                     ......