近期在研究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. 性能测试之LoardRunner 手动关联一

    概述: 1.什么是关联,关联的分类? 2.实例讲解 1.关联 为什么要关联?关联是应用LoadRunner进行性能测试的一项重要技能,那为什么我们要进行关联呢?当利用VuGen录制脚本时,它会拦截Cl ...

  2. SRM 582 Div II Level One: SemiPerfectSquare

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12580 比较简单,代码如下: #include <ios ...

  3. OSI七层模型基础知识及各层常见应用

       OSI Open Source Initiative(简称OSI,有译作开放源代码促进会.开放原始码组织)是一个旨在推动开源软件发展的非盈利组织.OSI参考模型(OSI/RM)的全称是开放系统互 ...

  4. MTD中的nand驱动初步分析---面向u-boot

    之前提到nand驱动的初始化分析,有一个结构体 struct mtd_info始终贯穿这些代码 再来分析一下这个结构体的基本功能,如何初始化,如何使用 一.分析过程 看看结构体的出现和使用方式 第一次 ...

  5. WebApp中调试jsavascript

    app有时候会使用网页作为一些功能页面,好处自然是有很多,但是也得调试 1 android app调试 自然是chrome remote debug 在android里面自带的浏览器一般都是基于chr ...

  6. SpringMVC批量上传

    @RequestMapping(value = "/upload") public String handleFormUpload(MultipartHttpServletRequ ...

  7. Android和java平台 DES加密解密互通程序及其不能互通的原因

    网上的demo一搜一大堆,但是,基本上都是一知半解(包括我).为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DES 加密和java DES加密的程序不能互通.就是加密的结果不一样 ...

  8. 一场刺激的游戏——很文艺的山东省第四届ACM赛总结(菜鸟版)

               人生就像一个个节点,节点中或许有成功,失败,满足,遗憾,但是只要它是不可复制的,在日后,便是美好.                                         ...

  9. Linux Shell 之 Shell中的函数调用

    说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的苦头,所以总 ...

  10. Java核心技术-高级特性(2)- SoftReference, WeakReference and PhantomReference

    Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java 垃圾回收器密切相关的引用类.这些引用类对象可以指向其它对象,但它们不同于一般的引用,因为它们的存在并不防碍 Ja ...