近期在研究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++多态的案例分析的更多相关文章

  1. Java多态案例分析

    一.多态的定义 同一事物,在不同时刻体现出不同状态. 例如:水在不同状态可能是:气态.液态.固态. 二.多态前提和体现 1.有继承关系 2.有方法重写 3.有父类引用指向子类对象 三.编译运行原理 1 ...

  2. JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例

    JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第 ...

  3. ENode框架Conference案例分析系列之 - 文章索引

    ENode框架Conference案例分析系列之 - 业务简介 ENode框架Conference案例分析系列之 - 上下文划分和领域建模 ENode框架Conference案例分析系列之 - 架构设 ...

  4. SQL性能优化案例分析

    这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...

  5. CSS3-3D制作案例分析实战

    一.前言 上一节,介绍了基础的CSS3 3D动画原理实现,也举了一个小小的例子来演示,但是有朋友跟我私信说想看看一些关于CSS3 3D的实例,所以在这里为了满足一下大家的需求,同时也为了以后能够更好的 ...

  6. 实时控制软件设计第一周作业-汽车ABS软件系统案例分析

    汽车ABS软件系统案例分析 ABS 通过控制作用于车轮制动分泵上的制动管路压力,使汽车在紧急刹车时车轮不会抱死,这样就能使汽车在紧急制动时仍能保持较好的方向稳定性. ABS系统一般是在普通制动系统基础 ...

  7. 个人作业-Week2 案例分析

    微软必应词典客户端的案例分析 第一部分 调研,评测 1)bug: 运行平台:iOS 10.0.2 必应词典版本:4.2.2 1. bug标题:词库加载错误 bug详细描述:学习界面中的经典词库出国考试 ...

  8. 【MySQL】排序原理与案例分析

    前言 排序是数据库中的一个基本功能,MySQL也不例外.用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐 ...

  9. 个人作业-Week2:案例分析

    截止时间:2016年9月25日24:00. 很多同学有误解,软件工程课是否就是理论课?或者是几个牛人拼命写代码,其他人打酱油的课?要不然就是学习一个程序语言,搞一个职业培训的课? 都不对, 软件工程有 ...

随机推荐

  1. ArcGIS 10.3 for Desktop新特性介绍

    ArcGIS 10.3是一个完整公布的ArcGIS平台,它包含新的产品(ArcGIS Pro),针对10.2版本号产品进行了功能增强和稳定性的改进. ArcGIS 10.3 for Server新特性 ...

  2. android 细节之 旋转动画

    Flip Animation for Android: 近期项目中用到了一个小动画,让物体实现一定的3D旋转效果,现记录例如以下: public class FlipAnimation extends ...

  3. Mac Python路径总结

    Mac 下Python 可以多版本的并存,并且Python的目录也有好几个,不过总体来说,Mac 自带的有python 还是比较方便的 Mac 系统自带的又Python ,可能Python版本需要更新 ...

  4. MonkeyRunner 学习

    monkeyrunner 本文档中包含 一个简单的monkeyrunner示例程序 monkeyrunner API简介 运行monkeyrunner monkeyrunner内建帮助 使用插件扩展m ...

  5. 几本不错的CPU设计以及VLSI的书籍

    1. Microprocessor Design Principales and Practrices with VHDL  特点:电路与VHDL一一对应,比较清楚,而且还用MAX+plus进行仿真 ...

  6. clear_logs.py修改

    #!/usr/bin/env python#encoding=utf-8"""清空最后修改时间跑今天7天以前的所有文件"""#指定监控的路径 ...

  7. ZOJ 2679 Old Bill(数学)

    主题链接:problemCode=2679" target="_blank">http://acm.zju.edu.cn/onlinejudge/showProbl ...

  8. Swift - 数组排序方法(附样例)

    下面通过一个样例演示如何对数组元素进行排序.数组内为自定义用户对象,最终要实现按用户名排序,数据如下: 1 2 3 4 var userList = [UserInfo]() userList.app ...

  9. mfc menu用法一

    #define IDM_NEW 0x1002#define IDM_EXIT 0x1003#define IDM_HELP 0x1004#define IDM_ABOUT 0x1005 hMenu = ...

  10. CImage类

    CImage封装了DIB(设备无关位图)的功能,因而可以让我们能够处理每个位图像素.这里介绍GDI+和CImage的一般使用方法和技巧. TAG: GDI  CImage  后处理   我们知道,Vi ...