本题实现类的额继承和派生。已经给出相关的数据结构和类的声明,要求实现类的相关函数,为保证比较的结果,所有的数据均以int类型(除了PI取3.14外),程序运行时,输入一个点p的坐标x和y,接着是圆的中心坐标和半径,接着是三角形的三个顶点,程序运行显示圆的面积和周长,点p是否位于园内,三角形的面积和周长,以及p是否位于三角形内。

函数接口定义:

在这里给出了数据结构和类的声明:
#include <iostream>
#include <math.h>
using namespace std;
const double PI = 3.14;
struct Point{//点的定义int x,y;
};
class Shape
{
public:int area(){return 0;}//计算图形面积int length(){return 0;}//计算图形的周长void show(){}//显示相关信息bool IsInside(Point p){return false;}//点p是否位于图形内,如果是,返回true
};
class Circle:public Shape{Point center;//圆心int radius;//半径
public:Circle(Point,int);int area();int length();void show();bool IsInside(Point p);
};class TriAngle:public Shape{Point a,b,c;//三角形的三个顶点
public:TriAngle(Point,Point,Point);int area();int length();void show();bool IsInside(Point p);
};

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
int main()
{Point p,center,a,b,c;int r;cin>>p.x>>p.y;cin>>center.x>>center.y;cin>>r;cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y;    Circle c1(center,r);c1.show();if(c1.IsInside(p))cout<<"p inside circle"<<endl;elsecout<<"p not inside circle"<<endl;TriAngle tri(a,b,c);tri.show();if(tri.IsInside(p))cout<<"p inside triangle"<<endl;elsecout<<"p not inside triangle"<<endl;       return 0;
}
/* 请在这里填写答案 */

代码实现如下:

Circle::Circle(Point p1 ,int  r1) //类内函数类外定义记得加类名前缀,此处占位参数,记得补上形参
{center=p1;radius=r1;
}int Circle::area()               //计算面积  {int area=PI*radius*radius;return area;}int Circle::length()            //计算周长{int length=2*PI*radius;return length;}
void Circle::show()
{cout<<"Circle:area="<<Circle::area()<<",length="<<Circle::length()<<endl;
}
bool  Circle::IsInside(Point p)      //判断是否在圆内{double dis1=sqrt(pow(p.x-center.x,2)+pow(p.y-center.y,2));if(dis1<=radius){return true;}else return false;}
TriAngle::TriAngle(Point p1 ,Point  p2 ,Point p3 )
{a=p1;b=p2;c=p3;
}int TriAngle::area()   //当三个点A、B、C的坐标分别为A(x1,y1)、B(x2,y2)、C(x3、y3)时,//三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
{                          //pow函数求平方,sqrt函数求开方double  c1=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));//c边   double b1=sqrt(pow(a.x-c.x,2)+pow(a.y-c.y,2));//b边double a1=sqrt(pow(c.x-b.x,2)+pow(c.y-b.y,2)); //a边double ps=(a1+b1+c1)/2;     int areas=sqrt(ps*(ps-a1)*(ps-b1)*(ps-c1));   //海伦公式的运用return areas;
}
int TriAngle::length()
{int  d1=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));int d2=sqrt(pow(a.x-c.x,2)+pow(a.y-c.y,2));int d3=sqrt(pow(c.x-b.x,2)+pow(c.y-b.y,2));return  d1+d2+d3;
}
void TriAngle::show()
{cout<<"TriAngle:area="<<TriAngle::area()<<",length="<<TriAngle::length()<<endl;
}
bool TriAngle::IsInside(Point p)    //判断点是否在三角形内,通过面积法去判断,
{double d1=sqrt(pow(a.x-p.x,2)+pow(a.y-p.y,2));  //ap边double d3=sqrt(pow(p.x-c.x,2)+pow(p.y-c.y,2));   //cp边double d2=sqrt(pow(p.x-b.x,2)+pow(p.y-b.y,2));  //bp边double  c1=sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));  //cdouble b1=sqrt(pow(a.x-c.x,2)+pow(a.y-c.y,2));//bdouble a1=sqrt(pow(c.x-b.x,2)+pow(c.y-b.y,2)); //adouble p1=(d1+d2+c1)/2;double p2=(d1+d3+b1)/2;double p3=(d3+d2+a1)/2;double ps=(a1+b1+c1)/2;int area1=sqrt(p1*(p1-d1)*(p1-d2)*(p1-c1));int area2=sqrt(p2*(p2-d1)*(p2-b1)*(p2-d3));int area3=sqrt(p3*(p3-a1)*(p3-d2)*(p3-d3));int areas=sqrt(ps*(ps-a1)*(ps-b1)*(ps-c1));if(areas>=(area1+area2+area3))//因为double int型转换间有数据丢失,所以此处是>=而非=={return true;}else return false;
}

PTA 6-1 类的继承和派生相关推荐

  1. 类的继承和派生java_类的继承和派生

    一.类的继承和派生定义. 继承:保持已有类的特性而构造新类的过程称为继承. 派生:在已有类的基础上新增自己的特性而产生新类的过程称为派生. 被继承的已有类称为基类. 派生出的新类称为派生类. 二.继承 ...

  2. 模块的封装之C语言类的继承和派生

    [交流][微知识]模块的封装(二):C语言的继承和派生 在模块的封装(一):C语言的封装中,我们介绍了如何使用C语言的结构体来实现一个类的封装,并通过掩码结构体的方式实 现了类成员的保护.这一部分,我 ...

  3. C++类的继承与派生

    文章目录 一.继承 二.基类和派生类 三.继承方式 六.多继承 七.应用经验 八.课后作业 九.版权声明 一.继承 继承是面向对象程序设计中最重要的一个概念.继承允许我们根据一个类来定义另一个类,达到 ...

  4. C++语言类的继承与派生介绍和示例

    继承 继承是面向对象程序设计中最重要的一个概念.继承允许我们根据一个类来定义另一个类,达到了代码功能重用效果. 当创建一个类时,如果待创建的类与另一个类存在某些共同特征,程序员不需要全部重新编写成员变 ...

  5. 实验四 类和对象;类的继承和派生;多态性; 接口;构造器应用

    实验四 类和对象:类的继承和派生:多态性: 接口:构造器应用 一.实验目的 1. 掌握类与对象的关系: 2. 掌握类的定义: 3. 掌握对象的声明及使用: 4. 掌握构造方法的概念及调用时机: 5. ...

  6. 【C++进阶知识】C++类的继承和派生

    目录 C++进阶知识系列文章 C++类的继承和派生 基本语法 访问修饰符 构造函数和析构函数 覆盖父类的方法 虚函数和纯虚函数 示例代码 参考资料 C++进阶知识系列文章 C++类的继承和派生 在面向 ...

  7. python 钻石继承_python3--object类,继承与派生,super方法,钻石继承问题

    python3--object类,继承与派生,super方法,钻石继承问题 发布时间:2018-04-13 20:38:05编辑:Run阅读(1914) 昨天内容复习 组合:什么有什么的关系(例:老师 ...

  8. c++ 类的继承与派生

     一.基本概念 1.类的继承,是新的类从已有类那里得到已有的特性.或从已有类产生新类的过程就是类的派生.原有的类称为基类或父类,产生的新类称为派生类或子类. 2.派生类的声明: class 派生类 ...

  9. c 自定义实现string类 clear_CC++语言15|类的继承和派生实现代码重用、扩充

    在C++中,继承是一个对象自动获取其父对象的所有属性和行为的过程.通过继承,您可以重用,扩展或修改在其他类中定义的属性和行为.通过继承,可以实现函数重写以及多态. 在C++中,继承另一个类的成员的类称 ...

最新文章

  1. 一个GDIPlus的Bug -- OutofMemory异常
  2. Atitit.提升 升级类库框架后的api代码兼容性设计指南
  3. Django REST framework 简介
  4. nav 鼠标移入当前高亮显示,其他消失
  5. 空类的sizeof为1
  6. SSM+Druid实现动态多数据源切换(已实践)
  7. linux系统串口设置参数,linux 串口编程记录(一)串口参数设置(示例代码)
  8. C#中split的用法
  9. JavaWeb项目实战(1)数据库环境搭载
  10. STM32L5特性简介 Cortex-M33内核TEE-TrustZone信息安全
  11. centeros php,CenterOs7 安装oracle19c的方法详解
  12. python查内置函数,怎么查看python内置函数
  13. office宏病毒反弹shell实验
  14. System.Activator类
  15. 群晖nas免费内网穿透,实现外网异地远程访问
  16. 数字图像处理_Matlab——车牌识别分析
  17. next. js_Next.js添加到您的应用程序中的图标
  18. 风影ASP.NET基础教学 9 数据访问
  19. 【SCI征稿】年底冲计算机神刊!最快1-2个月见刊!
  20. 02. 一元线性回归公式推导

热门文章

  1. 什么是中台?企业为什么要建中台?从数据中台到AI中台。
  2. En-Tan-Mo(ETM)项目周报(6.28-7.4)
  3. 【转】小生我怕怕工具包[2010.06.17](转自52破解论坛)
  4. 网易免费域名邮箱设置foxmail客户端登录
  5. Linux后台开发系列之「10.Autoconf 打包软件」
  6. 浅谈科研中作中的心得体会-讲座心得
  7. alibaba pc safe service无法删除,一直在后台运行怎么办?
  8. 手机计算机在线汇率准确吗,汇率计算机(汇率计算器在线计算)
  9. 大数据岗位薪资了解一下~
  10. C语言-思路与编程1