本文章转载来自:http://www.sollyu.com/?p=627

代码

#include <iostream.h>
class Animal
{
public:
void eat()
{
cout<<"animal eat"<<endl;
}
void sleep()
{
cout<<"animal sleep"<<endl;
}
void breathe()
{
cout<<"animal breathe"<<endl;
}
};
class Fish : public Animal
{
void breathe()
{
cout<<"fish bubble"<<endl;
}
};
void fn(Animal *pAn)
{
pAn->breathe();
}
void main()
{
Fish fh;
Animal *pAn;
pAn=&fh;
fn(pAn);
}

说明

我们先来看看我们这个程序的运行结果:animal breathe
这里的结果是这样来理解的,因为fish是继承animal而来的,在内存区域中,fish的内存模型如下:

故我们在将我们fish类的对象的指针传给我们的animal类的对象的指针的时候,我们系统执行的时候,系统调用的依然是我们积累里面的方法,
因为我们可以明显的发现我们的fish和animal的指针的首地址是一样的,故我们的运行时调用的就是我们的基类中的那个方法。

我们再来看看我们的另外一个程序段代码:

#include <iostream.h>
class Animal
{
public:
void eat()
{
cout<<"animal eat"<<endl;
}
void sleep()
{
cout<<"animal sleep"<<endl;
}
virtual void breathe()
{
cout<<"animal breathe"<<endl;
}
};
class Fish : public Animal
{
void breathe()
{
cout<<"fish bubble"<<endl;
}
};
void fn(Animal *pAn)
{
pAn->breathe();
}
void main()
{
Fish fh;
Animal *pAn;
pAn=&fh;
fn(pAn);
}

程序的运行结果是:fish bubble
这里我们可以利用c++多态性来解释,我们加上virtual以后,这个基类中的方法变成了虚函数,系统在进行编译时,我们会先去调用我们基类中的方法,此时如果我们的子类中没有我们这个方法,我们还是会去调用我们基类中的方法。

总结

在利用我们的c++多态性的时候,我们这样来理解,当我们的基类中的方法为virtual时,我们的子类中有方法的我们会先去调用我们的子类中的相应的方法,如果我们的子类中没有的我们的系统才会去调用我们的父类的响应的方法。

本篇文章由 爱推 发送

C++多态性的理解的更多相关文章

  1. Java(Android)编程思想笔记01:多态性的理解

    1. 多态的定义: 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式. (发送消息就是函数调用)   2. 多态的理解    多态是面向对象的重要特性,简 ...

  2. Java多态性的理解2

    多态的基础理解请参考:http://www.cnblogs.com/liujinhong/p/6003144.html Java的多态一直是我们理解的一个难点.在读过<深入理解Java虚拟机&g ...

  3. C#动态多态性的理解

    C#动态多态性是通过抽象类和虚方法实现的. 抽象类的理解 用关键字abstract创建抽象类,用于提供接口的部分类的实现(理解:接口不能提供实现,抽象类中可以有实现,接口与抽象类一起使用,可以达到父类 ...

  4. python中对多态和多态性的理解

    python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多态的概念依赖于继承) import abc class Animal( ...

  5. [java面试]关于多态性的理解

    执行时多态性是面向对象程序设计代码重用的一个最强大机制.Java多态性的概念也能够被说成"一个接口.多个方法".Java实现执行时多态性的基础是动态方法调度,它是一种在执行时而不是 ...

  6. 深刻理解Java编程的7个例子

    1. 阅读下列代码回答问题(第一个Java程序,理解PATH和CLASSPATH,学会使用javac和java命令) package cn.edu.uibe;    public class Hell ...

  7. JAVASE(十)面向对象:特性之多态性、Object类、代码块、关键字:static、final、父子类执行顺序

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.面向对象的特性之:多态性 多态性的理解:事物的多种形态 1.1 广义上多态性的体现:①方法的重写,重 ...

  8. java 面向对象(十五):面向对象的特征三:多态性

    1.多态性的理解:可以理解为一个事物的多种形态.2.何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)举例:Person p = new Man();Object obj ...

  9. 【Java】多态性

    文章目录 多态性 向下转型 多态性 可以理解为一个事物的多种形态. 对象的多态性:父类的引用指向子类的对象.只适用于方法,不适用于属性(编译和运行都看左边) 总结:对于对象的多态性,编译,看左边:运行 ...

随机推荐

  1. ZOJ-2365 Strong Defence 贪心,BFS

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2365 我没看懂题目...这样理解:一个有向图,要给一些边染色,使 ...

  2. console.read()读入的内容

    今天写的特别简单的代码,大体是一个模式选择,从控制台读入一个数,然后做出相应的选择. 代码如下: using System; using System.Collections.Generic; usi ...

  3. 10670 Work Reduction (贪心 + 被题意坑了- -)y

    Problem C: Work Reduction Paperwork is beginning to pile up on your desk, and tensions at the workpl ...

  4. asp.net Mvc+bootstarp+esayUI+EF 框架(一)

       "框架" 这两个字从通俗的意义来讲就是提高复用性,解耦类之间的关系和方便开发人员开发.   使用的技术也是大家基本现在都用过的,而这个系类我所要讲的内容是什么呢? 框架的基本 ...

  5. dublin core实例

    <?xml version="1.0"?> <metadata xmlns="http://example.org/myapp/" xmlns ...

  6. 24C02操作--松瀚汇编源码

    ; ; P_CLKIIC EQU P1.2 ; P_DATIIC EQU P1.3 ; PM_DATIIC EQU P1M.3 ; EE_ADDR DS 1 ;地址寄存器 ; TMP3_IIC DS ...

  7. Shell 命令--文件创建、搜索命令--总结自《Linux Shell 脚本攻略》

    (一)文件创建命令 1.touch命令 比如:touch abc命令在本地文件夹中创建了一个名为abc的空文件 2.cp命令 cp命令同意我们把一个文件的内容拷贝到同名或不同名的文件里,复制得到的文件 ...

  8. 编辑UITableviewCell--Editing

    self.navigationItem.rightBarButtonItem = self.editButtonItem; - (void)setEditing:(BOOL)editing anima ...

  9. 彻底理解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  10. 当前位置: 银光首页 > WPF > WPF学习教程 > WPF: ShowDialog() 切换到其他应用窗口后,再切换回来无法让子窗口总在最上方

    转自http://www.silverlightchina.net/html/study/WPF/2012/0723/17608.html