2018.6.7(多态性----几何形体处理程序----mooc)

2023-10-27 22:40

本文主要是介绍2018.6.7(多态性----几何形体处理程序----mooc),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

菜鸟教程
http://www.runoob.com/cplusplus/cpp-polymorphism.html

北大mooc
https://www.icourse163.org/learn/PKU-1002029030?tid=1002785058#/learn/content?type=detail&id=1003870405&cid=1004682705

派生类中和基类虚函数同名同参数的函数,不加virtual也自动成为虚函数
这里写图片描述
这里写图片描述
这里写图片描述

#include<iostream>
#include<cstdio>
#include<cmath>//sqrt头文件
#include<cstdlib>//qsort头文件
#include<algorithm>//sort头文件
using namespace std;class Shape
{
public:virtual double Area()=0;//纯虚函数virtual void Print()=0;//纯虚函数
};
class Rectangle:public Shape
{
public:double length,breadth;
public:virtual double Area();virtual void Print();
};
double Rectangle::Area()
{return length*breadth;
}
void Rectangle::Print()
{printf("Rectangle:%.2f\n",Area());
}class Triangle:public Shape
{
public:double a,b,c;
public:virtual double Area();virtual void Print();
};
double Triangle::Area()
{double p=(a+b+c)/2;return sqrt(p*(p-a)*(p-b)*(p-c));//海伦公式求三角形面积
}
void Triangle::Print()
{printf("Triangle:%.2f\n",Area());
}
class Circle:public Shape
{
public:#define PI 3.14double random;
public:virtual double Area();virtual void Print();
};
double Circle::Area()
{return PI*random*random;
}
void Circle::Print()
{printf("Circle:%.2f\n",Area());
}int compare(const void *s1,const void *s2)//自定义比较函数
{double a1;double a2;Shape **p1,**p2;p1=(Shape**)s1;p2=(Shape**)s2;a1=(*p1)->Area();a2=(*p2)->Area();if(a1<a2)return -1;else if(a1>a2)return 1;elsereturn 0;
}
bool cmp(Shape *a,Shape *b)
{return a->Area()<b->Area();
}//sort函数排序规则;int main()
{Shape *p_shape[100];Rectangle *p_r;Triangle *p_t;Circle *p_c;int n;cin>>n;for(int i=0;i<n;i++){getchar();char c;cin>>c;switch(c){case 'R':p_r=new Rectangle();cin>>p_r->length>>p_r->breadth;p_shape[i]=p_r;break;case 'T':p_t=new Triangle();cin>>p_t->a>>p_t->b>>p_t->c;p_shape[i]=p_t;break;case 'C':p_c=new Circle();cin>>p_c->random;p_shape[i]=p_c;break;}}cout<<"accomplish\n";qsort(p_shape,n,sizeof(Shape *),compare);//sort(p_shape,p_shape+n,cmp);for(int i=0;i<n;i++)p_shape[i]->Print();delete p_shape;return 0;
}

这里写图片描述

海伦公式求三角形面积
https://blog.csdn.net/chao1983210400/article/details/10521439

qsort函数用法
http://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html

这篇关于2018.6.7(多态性----几何形体处理程序----mooc)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/288903

相关文章

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

poj 3304 几何

题目大意:给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出No!。 解题思路:如果存在这样的直线,过投影相交点(或投影相交区域中的点)作直线的垂线,该垂线(也是直线)必定与每条线段相交,问题转化为问是否存在一条直线和所有线段相交。 若存在一条直线与所有线段相交,此时该直线必定经过这些线段的某两个端点,所以枚举任意两个端点即可。

POJ 2318 几何 POJ 2398

给出0 , 1 , 2 ... n 个盒子, 和m个点, 统计每个盒子里面的点的个数。 const double eps = 1e-10 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;}struct Point{double x , y

poj 2653 几何

按顺序给一系列的线段,问最终哪些线段处在顶端(俯视图是完整的)。 const double eps = 1e-10 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;}struct Point{double x , y ;Point(){}Po

三维布尔运算对不规范几何数据的兼容处理

1.前言 上一篇文章谈过八叉树布尔运算,对于规范几何数据的情况是没有问题的。 在实际情况中,由于几何数据来源不一,处理和生成方式不一,我们无法保证进行布尔运算的几何数据都是规范的,对于不规范情况有时候也有需求,这就需要兼容不规范数据情况,当然这种兼容不是一味的让步,而是对于存在有限的不规范数据的兼容处理。 2.原始数据示例 下图是一个大坝模型和之上要对其进行布尔运算的立方体。 大坝模型由

C++(多态性)

多态         多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。         最简单的例子就是使用同样的运算符'+',可以实现整数与整数之间,浮点数与浮点数之间的加法运算。 多态的类型         面向对象的多态性可以分为4类:重载多态﹑强制多态、包含多态和参数多态。

CF#284 (Div. 2) C.(几何规律)

题目链接:http://codeforces.com/contest/499/problem/C 解题思路: 把两个点的坐标分别带入方程组,如果最后两个值相乘为负,即异号,计数器++。其中有一个有趣的现象,从A到B的最短步数,可以变化为求A和B之间夹了多少条直线,那么最后只要求出直线数,即可求出最小步数。 如果一条直线夹在A和B中间,那么把A和B的坐标带入后,所得值相乘一定为负。数据很