面向对象两大特征多态与继承与虚函数的联系
来源:互联网 发布:安达渡嘉 知乎 编辑:程序博客网 时间:2024/06/08 11:26
多态通过运行状态区分可分为静态多态和动态多态:
1、静态多态可以理解为相同对象接收不同消息产生不同结果
2、动态多态可以理解为先同对象接收相同消息产生不同结果
静态多态为重载实现,而动态多态为虚函数实现
动态多态的实现需要继承来支撑,如下面代码:
class A{public: virtual void foo() { cout<<"A::foo() is called"<<endl; }};class B:public A{public: void foo() { cout<<"B::foo() is called"<<endl; }};int main(void){ /* A *a = new B(); a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! return 0; */ A a; B b; a=b; a.foo() return 0;}
可以看出通过继承和使用指针或者赋值可以很好地理解虚函数的作用。
虚函数包括普通虚函数,虚析构函数(为了释放在创建类对象是使用new在堆上创建的对象),纯虚函数构成抽象类。
附加一些关于生成对象时内存占用知识:
内存的分配方式有三种
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束后在将这些局部变量的内存空间回收。在栈上分配内存空间效率很高,但是分配的内存容量有限。
(3) 从堆上分配的。程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员自己负责在何时用 free 或 delete 释放内存。
在大部分情况下,多态是离不开继承。通过继承更好的实现多态。
阅读全文
0 0
- 面向对象两大特征多态与继承与虚函数的联系
- 面向对象构造函数 面向对象的三大特征 面相对象的继承 多态
- 黑马程序员—面向对象的一些特征、继承、接口与多态
- 黑马程序员——Java面向对象的特征:继承与多态
- 面向对象的三大特征与抽象类
- Java面向对象的三大特征:封装、继承和多态的详解
- 面向对象的三大特征是继承、封装和多态
- 面向对象的第二个特征----继承I(单继承与多重继承)
- Java面向对象的三大基本特征:继承、封装与多态
- 【c++笔记十一】面向对象三大特征之《封装》与《继承》
- 面向对象三大特征:继承、继承的特征、继承的概念
- java、面向对象的三大特征封装、继承、多态
- 面向对象的三大特征-封装,继承,多态
- java面向对象的三大特征:封装,继承,多态
- 面向对象的三大特征:封装、继承、多态
- 再次理解面向对象的第二大特征------继承
- OC面向对象的三大特征 封装 ,继承,多态
- 面向对象的三大特征--封装/继承/多态
- 09_直方图
- Ubuntu 14.04 安装最新版本Nginx
- 安装docker
- android动态设置EditText的password内容可不可见
- php递归实现无限级分类
- 面向对象两大特征多态与继承与虚函数的联系
- 在存在两个下拉列表时,如何使前一个列表改变使后者同时改变到对应的内容
- 判断是否facebook APP内部访问PHP函数
- SAP-MM-PA精解分析系列之基本介绍(02) -组织架构
- 08_白细胞计数
- 时间复杂度(大O)
- Runtime类
- 疯狂队列
- ajax get请求 下载文件