关于基类、派生类、对象、指针和虚函数、多态、 静态绑定、 动态绑定 纯虚函数、抽象类
来源:互联网 发布:程序员用代码求救 编辑:程序博客网 时间:2024/05/20 13:07
以下观点来源于《深入浅出MFC》
到底调用到哪个函数,必须视指针的原始类型而定,于指针实际所指对象无关。
1.如果你以一个“基类之指针”指向“派生类”,那么经由该指针你只能够调用基类所定义的函数。
2.如果你以一个“派生类之指针”指向一个“基类之对象”,你必须先做明显的转型操作(explicit cast)/(显示强制类型转换)。这种做法很危险,不符合真实生活经验,在程序设计上也会带给程序员困惑。
3.如果基类和派生类都定义了“相同名称之成员函数”,那么通过对象指针调用成员函数时,到底调用到哪一个函数,必须视该指针的原始类型而定,而不是视指针实际所指的对象的类型而定。这与第1点其实意义想通。
虚函数正是为了对“如果你以一个基类之指针指向一个派生类之对象,那么通过该指针你就只能调用基类所定义之成员函数”这条规则反其道而行的设计。也有点反继承的味道呵呵 。多态。
从操作类型定义来看,什么是虚函数呢?如果你预期派生类有可能重新定义某一个成员函数,那么你就在基类中把此函数设为virtual。MFC有两个十分十分重要的虚函数:与document有关的serialize函数和view有关的ondraw函数。你应该在自己的CMyDoc和CMyView中改写这两个虚函数。
多态(Polymorphism)
以相同的指令指针调用了不同的函数,这种性质称为Polymorphism,意思是“the ability to assume many forms”(多态)。编译器无法再编译时期判断基类指针到底调用哪一个派生类函数,必须在执行期才能判断之,这称为后期绑定late binding或动态绑定dynamic binding。至于C函数或C++的non-virtual函数,在编译时期就转换为一个固定地址的调用了,这称为前期绑定early binding或静态绑定static binding。
纯虚函数
纯虚函数其函数值“=0 ”。纯虚函数不需要定义其实际操作,它的的存在只是为了在派生类中被重新定义,只是为了提供一个多态接口。只要是拥有纯虚函数的类,就是一个抽象类,它是不能够被实例化(instantiate)的,也就是说,你不能根据它产生一个对象。
关于抽象类。
如果抽象类被继承了,在派生类中没有改写基类中的纯虚函数,那么派生类依然是个抽象类,直到纯虚函数被实际操作为止。
虚函数派生下去仍为虚函数,而且可以省略virtual关键词。
- 关于基类、派生类、对象、指针和虚函数、多态、 静态绑定、 动态绑定 纯虚函数、抽象类
- c++笔记07---纯虚函数和抽象类/纯抽象类,虚函数表和动态/后期绑定
- 关于C++基类、派生类的引用和指针(动态绑定和静态绑定)
- 抽象类 纯虚函数 虚函数 派生类 派生类对象 基类对象 ——调用顺序,用基类调用派生类的方法
- Day44、钻石继承、虚继承、多态(概念!)、虚函数覆盖、纯虚函数、抽象类、纯抽象类、动态绑定、虚析构函数、typeid运算符、动态类型转换
- 二义性、虚函数、纯虚函数、虚基类、抽象类、基类对象与派生类对象之间赋值兼容原则
- 关于基类和派生类的动态绑定问题
- 虚函数的静态绑定和动态绑定
- 动态绑定和静态绑定(虚函数)
- 虚函数和纯虚函数 动态绑定
- C++语法基础--动态绑定,派生类,虚函数,覆盖虚函数机制
- 抽象基类和纯虚函数
- 纯虚函数和抽象基类
- 纯虚函数和抽象基类
- 抽象基类和纯虚函数
- 抽象基类和纯虚函数
- 抽象基类和纯虚函数
- 纯虚函数和抽象基类
- AOP
- Java中的字符集编码入门技巧
- 从今天起,重生!
- WIN7安装IDES注意点
- 10年第六届湖南省acm程序设计大赛 第一题 A 汽水瓶
- 关于基类、派生类、对象、指针和虚函数、多态、 静态绑定、 动态绑定 纯虚函数、抽象类
- 通过注册表更改系统盘盘符
- unity3d用鼠标拖动物体的一段代码
- Unity3d 鼠标拾取
- Android code cut 1 --圆形在屏幕撞墙弹回
- 专题研究第三期:XSS攻击——跨站(引言篇)
- 专题研究第三期:XSS攻击——跨站(第二篇)
- 程序2.1:非递归方法实现迷宫
- Vmware虚拟机下红旗Linux 6.0桌面版安装尝试