笔记11 《C++ 大学教程》
来源:互联网 发布:nginx转发配置 编辑:程序博客网 时间:2024/06/06 00:02
第十三章 面向对象编程:多态性
使用virtual
函数和多态性,可以设计和实现更具扩展性的系统。程序员编写的程序可以处理在开发阶段不存在的对象类型
使用virtual
函数的多态性程序设计无需使用switch
逻辑。 可以利用virtual
函数自动完成等价的逻辑
必要时,派生类会提供基类virtual
函数自己的实现,否则就是用基类的实现。如果通过按引用和使用圆点成员选择符来调用virtual
函数,则该函数调用是在编译时确定的(这称为静态绑定),被调用的virtual
函数视为该特定对象定义的函数
抽象类只能做基类,称为抽象基类,不能实例化任何对象。如果类可以实例化对象,那么该类就称为具体类
把类的一个或多个virtual
声明为纯virtual
函数,该类就称为抽象类。纯virtual
函数是在它的声明中带有纯指示符(=0
)的函数
如果一个类从一个带有纯virtual
函数的类派生,并且该类没有为该纯virtual
类提供定义,那么在此类中的纯virtual
函数依旧是纯virtual
函数,相应的,该派生类也是一个抽象类
C++支持多态性,所谓多态性是由于继承而关联在一起的不同类对象,对于相同的成员函数调用做出不同的反应
多态性通过virtual
函数和动态绑定实现的。当通过基类指针或引用请求使用一个virtual
函数时,C++在与对象相关的合适的派生类中选择正确的重载函数
通过virtual
函数和多态性的使用,一个成员函数调用根据接受该调用对象的类型不同做出不同的反应
尽管不能实例化抽象基类的对象,当可以声明指向抽象基类对象的指针和引用。这样的指着和引用可以用来对实例化的具体派生类的对象进行多态操作。
动态绑定需要在运行时把virtual
成员函数调用传送到恰当类的virtual
函数的版本。virtual
函数表简称vtable
,他是一个包含函数指针的数组。每个含有virtual
函数的类都有vtable
。对于类中的每个virtual
函数,在vtable
中都有一个包含函数指针的项,此函数指针指向该类对象的virtual
函数版本。
当基类提供一个virtual
成员函数时,派生类可以重载此virtual
函数,但并不是必须。
当由指向派生类对象的基类指针进行一次函数调用时,vtable
中相应的函数指针可以在执行期间获得,然后间接引用该指针,从而完成这此函数调用。vtable
的检索和指针的间接引用只占用很少的运行时间。
任何类只要它的vtable
中含有一个或多个0
指针,就是一个抽象类,否则就是具体类
dynamic_cast
运算符检查指针所指向对象的类型,然后判断这一类型是否与此指针正在转换成的类型有一种“是一个”的关系。如果是,返回对象的地址,否则返回0
运算符typeid
返回包含操作数数据类型信息的type_info
类对象的一个引用,信息中包含数据类型的名称。该运算符包含着头文件<tyoeinfo>
中.type_info
的成员函数name
返回一个基于指针的字符串,包含type_info
对象所表示的类型名
如果一个类包含virtual
函数,就要把基类的析构函数声明为virtual
析构函数,这会使所有派生类的析构函数自动声明为virtual
析构函数,即使它们的名称和基类函数不同。
- 笔记11 《C++ 大学教程》
- C大学教程
- java大学教程第一章笔记
- 笔记1 《C++ 大学教程》
- 笔记2 《C++大学教程》
- 笔记3 《C++大学教程》
- 笔记5 《C++大学教程》
- 笔记6 《C++大学教程》
- 笔记7 《C++大学教程》
- 笔记8 《C++大学教程》
- 笔记9 《C++ 大学教程》
- 笔记10 《C++ 大学教程》
- 笔记12 《C++ 大学教程》
- 笔记13 《C++ 大学教程》
- 【笔记】《C#大学教程》- 第11章 异常处理
- c大学程序教程注意点
- 我的大学--孙鑫MFC笔记教程
- 《大学算法教程Algorithms》笔记--Chapter1--Part1
- [HDU 5354] Bipartite Graph
- Hadoop学习(一)
- D
- [LeetCode]404. Sum of Left Leaves 树的典型题目
- POJ1789 Truck History
- 笔记11 《C++ 大学教程》
- 详解linux下编译安装配置php5.6.30过程
- Linux学习笔记01:文件管理
- 慕课网学习Java入门第二季笔记
- 二叉树的基本操作 C++
- E
- 线性筛+区间枚举
- Linux常用命令
- csdn如何转载别人的文章