pre{
line-height:1;
color:#1e1e1e;
background-color:#f0f0f0;
font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;}
.selfFuc{color:#800080;}
.bool{color:#d2576f;}
.condition{color:#000080;font-weight:bold;}
.key{color:#000080;}
.var{color:#800000;font-style:italic;}
.Digit{color:#ff00ff;font-weight:bold;}
.includePre{color:#1e1e1e;}
.operator {color:#008000;font-weight:bold;}

多态

 

何为多态?

多态即是多种形态。

多种形态是指一个事物的某种属性会出现多个不同的状态。

比如:云的形状  可能是圆 可能是椭圆  可能是马的样子 也可能是牛的样子

又如鸟:  有的鸟会飞 有的鸟不会飞,有的鸟飞的高、有的鸟飞的低

C++中 实现 即是 : 一个接口,多种实现

运行时多态

 

在计算机中,如何描述这种多态?

主要的使用方法乃是 继承机制

比如云是基类,各种形状的云是派生类,比如鸟是基类,各种飞行的鸟是派生类。

 

程序要调用各个派生类的某个描述公共属性的方法,如果为每个派生类写一个调用方法,显然是很浪费的。

由此,C++引人了虚函数概念。

 

通过虚函数,将派生类的调用,转换为基类指针的操作。

为基类指针赋予不同派生类对象的地址,就可以操纵各个派生类中继承自基类的虚函数。

这样,只需对基类指针处理,就实现了操作各个派生类。

 

示例:

 
class Bird
{
public:
         virtual void fly()
         {
                   cout<<"Bird Can Fly"<<endl;
         }
};
 
class Duck:public Bird
{
public:
         void fly()
         {
                   cout<<"DUCK can not fly"<<endl;
         }
};
 
class Chicken:public Bird
{
public:
         void fly()
         {
                   cout<<"Chicken can not fly"<<endl;
         }
 
};
 
 
void Fly(Bird *pFly)
{
         pFly->fly();
}
 
 
 
 
 
 
 
void main()
{
 
 
         Bird bird;
         Duck duck;
         Chicken chicken;
 
         Fly(&bird);
         Fly(&duck);
         Fly(&chicken);
 
 
 
 
 
         while (getchar()!='0')
         {
         }       
}
 
 

静态多态

 

静态多态是指通过模板函数的方式实现多态。

 

适用于:各个类是单独定义 但是它们具有相同的操作,这个相同的操作便可通过模板函数的方式调用

 

比如:

 
Template <class T>
Void DoSomething(T &t)
{
t.doSomething();
}
 

示例:

class Duck:
 {
public:
         void fly()
         {
                   cout<<"DUCK can not fly"<<endl;
         }
};
 
class Chicken:
{
public:
         void fly()
         {
                   cout<<"Chicken can not fly"<<endl;
         }
 
};
 
template <class T>
 
void Fly(T &t)
{
         t.fly();
 
}
 
 
         Duck duck;
        Chicken chicken;
 
         Fly(duck);            //编译器在编译时 会自动处理为 Fly<Duck>()
        Fly(chicken);       

重载

重载指的是函数的重载,在编译时就确定了。在此不再做介绍

本文使用 书画小说软件 发布,内容与软件无关,书画小说软件 更惬意的读、更舒心的写、更轻松的发布。

 

多态.xml的更多相关文章

  1. 网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档,视频项目

    小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心: ...

  2. 继承,多态,集合,面向对象,XML文件解析,TreeView动态加载综合练习----->网络电视精灵项目练习、分析

    网络电视精灵 项目运行状态如图: 项目完成后的类: 首先,将程序分为二部分进行: 一:TreeView节点内容的设计及编写: 1.1遍写XML文件:管理(FullChannels.xml),A类电视台 ...

  3. java 解析并生成 XML

    在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...

  4. 打造完美的xml技术解决方案(dom4j/xstream)

    转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...

  5. hbm.xml 详解总结

    转自 http://blog.csdn.net/tuke_tuke/article/details/49717991 一.hibernate映射文件的作用: Hibernate映射文件是Hiberna ...

  6. XML学习笔记3——XSD简述

    现在的语言,如果不有那么一点OO的影子,都不好意思称之为语言了.在XML的语义约束方面,DTD虽然简单,但是功能不够强大,完全是直白的描述,于是又有了替代DTD的XSD(XML Schema Defi ...

  7. jackson对多态or多子类序列化的处理配置

    [TOC] Jackson Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 多态类型的处理 jackson允许配置多态类型处理, ...

  8. 第八章xml学习

    1.ASP.NET和JSP的关系 ASP.NET 和JSP都是用来开发动态网站的技术,只不过ASP.NET是通过c#语言来操作的, 而JSP是通过Java语言来操作的. 2.为什么学习XML? 01. ...

  9. python_day7【模块configparser、XML、requests、shutil、系统命令-面向对象】之篇

    python内置模块补充 一.configparser configparser:用户处理特定格式的文件,其本质是利用open打开文件 # 节点 [section1] #键值对k1 = v1 k2:v ...

随机推荐

  1. php监听客户端连接状态

    http://bbs.csdn.net/topics/390661022 http://www.poluoluo.com/jzxy/201207/169977.html http://zhidao.b ...

  2. <转Tanky Woo> 字典树

    又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公共前缀 ...

  3. Docker仓库搭建(Registry + Portus)

    1.更新系统: yum update -y 2. 安装docker-compos yum -y install epel-release    #pip安装包在epel源中   yum -y inst ...

  4. python中的类简单讲解

    类似其它的语言, Python 中的函数使用小括号( () )调用.函数在调用之前必须先定义.如果函数中没有 return 语句, 就会自动返回 None 对象.      Python 是通过引用调 ...

  5. 利用SOLR搭建企业搜索平台 之——配置文件

    运行solr是个很简单的事,如何让solr高效运行你的项目,这个就不容易了.要考虑的因素太多.这里很重要一个就是对solr的配置要了解.懂得配置文件每个配置项的含义,这样操作起来就会如鱼得水! 在so ...

  6. Hibernate 中update hql语句

    今天在MySQL中用hibernate测试update语句发现以下问题: update语句竟然不去作用: 表机构如下: create table student(sid int primary key ...

  7. windows主机无法访问服务器

    在CentOS下安装配置hadoop的时候,总显示因为网络端口而导致主机无法访问服务器,遂打算先关闭一下防火墙. 偶然看到防火墙的配置操作说明,感觉不错.执行”setup”命令启动文字模式配置实用程序 ...

  8. aptana studio 3支持jquery

    首先要说的一点是,如果你不使用PortableGit,就不要安装,否则New From Template中会缺失大部分模板.至于还有什么缺陷,暂时没测出来,本人也是刚玩aptana studio 3哈 ...

  9. github概念和实战

    fork: 通过fork操作,你将拥有了别人创建的repo的ownership,但是url却变成了/youraccount/repo,这时你将可以做git push操作 clone: 该命令是直接将r ...

  10. Qt环境搭建(Visual Studio)

    简述 经常有人问我编写Qt程序时使用什么IDE,其实这个真的很难回答(各有所长),只能说看个人爱好了,因为我两个都用,而且两个都很喜欢(比较多情吧O(∩_∩)O~)! 下面将进行Qt Creator与 ...