c++多态的案例分析
近期在研究c++中多态的应用 ,当中遇到些许的疑问与问题,可是终于的结果是不容置疑的,以下记录下我的学习过程,以纪念本个知识点。
首先,是从一个案例開始的,题目大意是这种:
设定一个多边形的公共类,然后再设定多个图形的各个派生类,最后通过基类,依据多态的应用通过基类,求出所求图形的面积
于是依据自己所学的知识,開始大致的勾画原始的雏形例如以下:
#include
using namespace std;
class Shape //基类
{
public:
virtual double area()=0;
};
int main ()
{
Circle c(5); //圆參数赋值
Rectangle r(3,4); //矩形參数赋值
Triangle t(3,4); //三角形赋值
Shape *p; //设置一个基类的指针
p=&c; //调用求圆面积的方法 求圆的面积
cout<<p->area()<<endl;
p=&r; //调用求矩形面积的方法求矩形面积
cout<<p->area()<<endl;
p=&t; //调用求三角形面积的方法求三角形的面积
cout<<p->area()<<endl;
system("pause");
return 0;
}
然后,再把一个一个的派生类,加入进去 ,效果例如以下:
#include
using namespace std;
class Shape
{
public:
virtual double area() =0;
};
class Circle: public Shape
{
public:
Circle(double r):radius(r){}
virtual double area()
{
return radius*radius*3.14159;
}
private:
double radius;
};
class Rectangle:public Shape
{
public:
Rectangle(double x,double y):x(x),y(y){}
virtual double area()
{
return x*y;
}
private:
double x,y;
};
class Triangle:public Shape
{
public:
Triangle(double x,double y):x(x),y(y){}
virtual double area()
{
return x*y/2;
}
private:
double x,y;
};
int main ()
{
Circle c(1);
Rectangle r(3,4);
Triangle t(3,4);
Shape *p;
p=&c;
cout<<p->area()<<endl;
p=&r;
cout<<p->area()<<endl;
p=&t;
cout<<p->area()<<endl;
system("pause");
return 0;
}
执行结果:
相同的道理,还能够这样子写,仅仅是每一个人的习惯不同而已,代码例如以下:
#include
using namespace std;
class shape
{
public:
virtual void area()=0;
};
class Trangle : public shape
{
protected:
double a,b;
public:
Trangle(double a,double b):a(a),b(b){};
virtual void area()
{
cout<<a*b*0.5<<endl;
}
};
class Rectangle:public shape
{
protected:
double a,b;
public:
Rectangle(double a,double b):a(a),b(b){};
virtual void area()
{
cout<<a*b<<endl;
}
};
class Circle:public shape
{
protected:
double a;
public:
Circle(double a):a(a){};
virtual void area()
{
cout<<3.14*a*a<<endl;
}
};
int main()
{
shape *p;
Trangle t(1,1);
Rectangle r(1,1);
Circle c(2);
p=&t; // 三角形面积
p->area() ;
p=&r; //矩形面积
p->area() ;
p=&c; // 圆形面积
p->area();
return 0;
}
当中须要注意的点是: 一定要写成的是公有的派生,即public 不然默认的都是私有的派生。还有在写代码的过程中,一定要注意不要把英语字母写错,当中的一个字母错了,花了我好长时间,最后才检查出来,敲代码的前期大都会遇到这种情况的,我们须要做的就是,认真再认真。
c++多态的案例分析的更多相关文章
- Java多态案例分析
一.多态的定义 同一事物,在不同时刻体现出不同状态. 例如:水在不同状态可能是:气态.液态.固态. 二.多态前提和体现 1.有继承关系 2.有方法重写 3.有父类引用指向子类对象 三.编译运行原理 1 ...
- JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例
JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第 ...
- ENode框架Conference案例分析系列之 - 文章索引
ENode框架Conference案例分析系列之 - 业务简介 ENode框架Conference案例分析系列之 - 上下文划分和领域建模 ENode框架Conference案例分析系列之 - 架构设 ...
- SQL性能优化案例分析
这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...
- CSS3-3D制作案例分析实战
一.前言 上一节,介绍了基础的CSS3 3D动画原理实现,也举了一个小小的例子来演示,但是有朋友跟我私信说想看看一些关于CSS3 3D的实例,所以在这里为了满足一下大家的需求,同时也为了以后能够更好的 ...
- 实时控制软件设计第一周作业-汽车ABS软件系统案例分析
汽车ABS软件系统案例分析 ABS 通过控制作用于车轮制动分泵上的制动管路压力,使汽车在紧急刹车时车轮不会抱死,这样就能使汽车在紧急制动时仍能保持较好的方向稳定性. ABS系统一般是在普通制动系统基础 ...
- 个人作业-Week2 案例分析
微软必应词典客户端的案例分析 第一部分 调研,评测 1)bug: 运行平台:iOS 10.0.2 必应词典版本:4.2.2 1. bug标题:词库加载错误 bug详细描述:学习界面中的经典词库出国考试 ...
- 【MySQL】排序原理与案例分析
前言 排序是数据库中的一个基本功能,MySQL也不例外.用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐 ...
- 个人作业-Week2:案例分析
截止时间:2016年9月25日24:00. 很多同学有误解,软件工程课是否就是理论课?或者是几个牛人拼命写代码,其他人打酱油的课?要不然就是学习一个程序语言,搞一个职业培训的课? 都不对, 软件工程有 ...
随机推荐
- uvc摄像头代码解析7
13.uvc视频初始化 13.1 uvc数据流控制 struct uvc_streaming_control { __u16 bmHint; __u8 bFormatIndex; //视频格式索引 _ ...
- AssetBundle.CreateFromFile的有趣事情
有趣的事情发生了: [@MenuItem("AssetBundles/Build AssetBundles")] staticvoid BuildABs () { AssetBun ...
- Kendo UI开发教程(21): Kendo MVVM 数据绑定(十) Source
Source绑定可以把ViewModel的值和由Kendo模板定义的目标元素绑定,如果ViewModel的值发生变化,被绑定的目标元素也随之发生变化.模板由属性data-template指定,它的值为 ...
- 【ASP.NET Web API教程】2.3.7 创建首页
原文:[ASP.NET Web API教程]2.3.7 创建首页 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. Part 7: Crea ...
- 【Demo 0007】Java基础-类扩展特性
本章学习要点: 1. 掌握static 修饰的类,方法以及变量的功能及用法; 2. 掌握代码块(静态,非静态)的作用以及注意事项: 3. 了解基本数据类 ...
- OSGi:生命周期层
前言 生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的.生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或者两者的结合),并且给了应用本 ...
- [Machine Learning (Andrew NG courses)]IV.Linear Regression with Multiple Variables
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenFoXzE5OTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- 用VC实现竖写汉字的方法
中国人自古就有自右至左.从上到下书写汉字的习惯.而当我们在自己所编写的应用程序中使用输出函数输出的总是自左至右的横排文字.有没有可能在我们的应用程序中实现竖写汉字的效果呢?笔者偶然发现了一种利用VC实 ...
- OCA读书笔记(8) - 管理用户安全
创建用户:create user +用户 default tablespace + 表空间名 identified + 验证方式 SQL> create user easthome profil ...
- 使用gdb调试游戏服务器
前言 谈论gdb重要性 一般来说.提gdb,命令用于调试."命令",用户是几乎相同的复杂话.而事实确实如此,实际的开发调试必须用到gdb. 如今.大多数Linux系统是存在于ser ...