笔记11 《C++ 大学教程》
2017-08-07 22:08
176 查看
第十三章 面向对象编程:多态性
使用
使用
必要时,派生类会提供基类
抽象类只能做基类,称为抽象基类,不能实例化任何对象。如果类可以实例化对象,那么该类就称为具体类
把类的一个或多个
如果一个类从一个带有纯
C++支持多态性,所谓多态性是由于继承而关联在一起的不同类对象,对于相同的成员函数调用做出不同的反应
多态性通过
通过
尽管不能实例化抽象基类的对象,当可以声明指向抽象基类对象的指针和引用。这样的指着和引用可以用来对实例化的具体派生类的对象进行多态操作。
动态绑定需要在运行时把
当基类提供一个
当由指向派生类对象的基类指针进行一次函数调用时,
任何类只要它的
运算符
如果一个类包含
使用
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析构函数,即使它们的名称和基类函数不同。
相关文章推荐
- 笔记12 《C++ 大学教程》
- 笔记13 《C++ 大学教程》
- 笔记10 《C++ 大学教程》
- C++大学基础教程_11_10_实例研究:String类
- C++大学基础教程_11_8_实例研究:Array类
- 笔记1 《C++ 大学教程》
- c++学习笔记(1)——环境搭建、经典教程推荐及 Visual Studio 2005/2008中如何编译和运行C++程序
- c++ primer plus阅读笔记11---深拷贝与浅拷贝
- 寒冰linux视频教程笔记11 文件系统
- C++教程学习笔记
- C++ FAQ学习笔记 11 章 析构函数
- 《Unix & Linux 大学教程》 - 第九、十章 学习笔记
- 孙鑫MFC笔记教程(2)--C++经典语法与应用
- 【C++学习笔记】11_多维数组
- 现代C++学习笔记之一资料篇(C++ 11)
- 孙鑫C++教程笔记02
- 《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记
- Java基础知识_毕向东_Java基础视频教程笔记(11-12)
- 《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记
- C++学习笔记 lesson11 MyString类讲解