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  不然默认的都是私有的派生。还有在写代码的过程中,一定要注意不要把英语字母写错,当中的一个字母错了,花了我好长时间,最后才检查出来,敲代码的前期大都会遇到这种情况的,我们须要做的就是,认真再认真。

 

时间: 2024-08-19 08:03:02

c++多态的案例分析的相关文章

Java多态案例分析

一.多态的定义 同一事物,在不同时刻体现出不同状态. 例如:水在不同状态可能是:气态.液态.固态. 二.多态前提和体现 1.有继承关系 2.有方法重写 3.有父类引用指向子类对象 三.编译运行原理 1.编译看左边,父类是否有此方法,没有就报错. 2.运行看右边,运行结果一般是右边子类重写后的结果. 四.案例分析 1 package polymorphic; 2 /** 3 * 多态案例1,基础 4 * @author zhongfg 5 * @date 2015-06-16 6 */ 7 int

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

JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第三个特征,何谓多态? 定义 某一类事物的多种存在方式 比如 动物中的猫狗,人类中的男人,女人 我们可以把多态理解为事物存在的多种体现形态 当我们new一个猫类的时候,和new 一个动物,其实是一样的,多种形态变现 所以我们可以分这几部分分析 多态的体现 多态的前提 3.多态的好处 4.多态的应用 我

Linux服务器挂死案例分析

问题现象: 在linux服务器上运行一个指定的脚本时,就会出现无数个相同进程的,而且不停的产生,杀也杀不掉,最后系统就陷入死循环,无法登陆,只能人工去按机器的电源键才可以.这够崩溃的吧? 问题分析过程: 在分析过程中发现这个特定的脚本有些特别,和系统中已有的命令的名字是相同的. 以free命令为例: 这个脚本名字就叫做free(后面没有带.sh),而且这个脚本文件里又去调用了free命令. 这个脚本的本意应该是要去调用free命令来完成一个任务. 那是否就是因为这样就会导致问题呢? 其实光这样是

一个拓扑,搞定BGP13条路径选择算法 - 案例分析

1.1.BGP协议最佳路径选择算法 BGP是一个路径矢量路由协议,也就是说,它的工作就是在自主系统间交换路由信息,以便发现访问互联网某处数据的最有效路径.每个 BGP路由器通过邻居声名与周边的一个或多个路由器连接.一旦建立了邻居关系,这些BGP路由器之间就会相互交换路由信息.据我最近一次统计,整个互联网上有大约12.5万个路由信息,因此要配备一个强大的路由器才能将所有BGP路由信息接收下来. 1.1.1.BGP 最佳路径选择算法概述 由于整个互联网的BGP路由表有超过30万个路由,同时一个BGP

微软小娜案例分析

微软小娜APP的案例分析 我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票的网站,互相联系用的微信.QQ,等等都是软件,都很值得分析.你为何成为它们的用户?它们的团队做对了什么,做错了什么?如果你来做,会做得更好么? 通过各种案例分析,评测,辩论,总结,我们就能看到软件工程的原则在实践中的种种体现,学好软件工程,帮助我们在实践中做得更好. 产品 请下载 微软小娜-智能助手,win10,iOS或Android客户端都有! 第一部分 调研, 评测 下载并使用,描述最简单直观

微软小娜APP的案例分析

个人博客作业三:微软小娜APP的案例分析 我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票的网站,互相联系用的微信.QQ,等等都是软件,都很值得分析.你为何成为它们的用户?它们的团队做对了什么,做错了什么?如果你来做,会做得更好么? 通过各种案例分析,评测,辩论,总结,我们就能看到软件工程的原则在实践中的种种体现,学好软件工程,帮助我们在实践中做得更好. 产品 请下载 微软小娜-智能助手,win10,iOS或Android客户端都有! 第一部分 调研, 评测 (软件的b

个人作业2--英语学习APP案例分析

我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票的网站,互相联系用的微信.QQ,等等都是软件,都很值得分析.你为何成为它们的用户?它们的团队做对了什么,做错了什么?如果你来做,会做得更好么?通过各种案例分析,评测,辩论,总结,我们就能看到软件工程的原则在实践中的种种体现,学好软件工程,帮助我们在实践中做得更好. 第一部分 调研, 评测 1.下载并使用,描述最简单直观的个人第一次上手体验 . 整体来说,界面还是比较美观的,最大的优点应该就是没有植入广告了.而且分块也比较明

来自云计算大会上的无线网攻击案例分析

来自云计算大会上的无线网攻击案例分析 阅读全文 URL

《大型网站技术架构-核心原理与案例分析》之一: 大型网站架构演化

最近刚刚读完李智慧的<大型网站技术架构-核心原理与案例分析>,对每章重点内容作了一些笔记,以便加深印象及日后查阅. 一.大型网站软件系统的特点 高并发,大流量:需要面对高并发用户,大流量访问. 高可用:系统7X24小时不间断服务. 海量数据:需要存储.管理海量数据,需要使用大量服务器. 用户分布广泛,网络情况复杂:许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别. 安全环境恶劣:由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击. 需求快