关于多态性和虚函数的理解
来源:互联网 发布:广电网络属于国企吗 编辑:程序博客网 时间:2024/05/07 05:05
对于多态性的理解加深,编译器的类型转换,以及
我们在讲fish类的对象fh的地址赋给pAN之时,c++编译器进行了类型转换,此时pAn保存的是animal对象的地址。当fn函数执行pAn->breath()时,调用的就是animal的对象的breath函数。
<-this指针 anima对象内存fish新增加的部分当构造fish类的对象时,先从animal 的构造函数去构造animal对象,然后调用fish类的构造函数完成自身部分的构造,从而拼接出一个完整的fish对象,当讲fish类的对象转换成animal 的类型时,该对象被认为是源对象整个内存模型的上半部分,即为animal的对象所占的内存。
virtual关键字可以改变此种情况;
当c++编译器在编译的时候,发现animal的类的breath()函数是虚函数,这个时候c++采用迟邦定技术,编译时并不确定其具体的调用函数,而在运行时,依据对象的类型(比如是传递的类对象的地址)来确认调用的是哪一个函数。这种能力就是c++的多态性。,如果没有在breath()函数前加virtual关键字时,c++编译器在编译时就确定了哪个函数被调用,这叫做早期绑定。
c++的多态性用一句话概括:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象的类型是派生类,就调用派生类的函数,如果对象类型是基类,就调用基类的函数。
凡是含有纯虚函数的类叫做抽象类,这种类只是作为基类的派生类服务,在派生类中必须完全实现基类的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。
我们在讲fish类的对象fh的地址赋给pAN之时,c++编译器进行了类型转换,此时pAn保存的是animal对象的地址。当fn函数执行pAn->breath()时,调用的就是animal的对象的breath函数。
<-this指针 anima对象内存fish新增加的部分当构造fish类的对象时,先从animal 的构造函数去构造animal对象,然后调用fish类的构造函数完成自身部分的构造,从而拼接出一个完整的fish对象,当讲fish类的对象转换成animal 的类型时,该对象被认为是源对象整个内存模型的上半部分,即为animal的对象所占的内存。
virtual关键字可以改变此种情况;
当c++编译器在编译的时候,发现animal的类的breath()函数是虚函数,这个时候c++采用迟邦定技术,编译时并不确定其具体的调用函数,而在运行时,依据对象的类型(比如是传递的类对象的地址)来确认调用的是哪一个函数。这种能力就是c++的多态性。,如果没有在breath()函数前加virtual关键字时,c++编译器在编译时就确定了哪个函数被调用,这叫做早期绑定。
c++的多态性用一句话概括:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象的类型是派生类,就调用派生类的函数,如果对象类型是基类,就调用基类的函数。
凡是含有纯虚函数的类叫做抽象类,这种类只是作为基类的派生类服务,在派生类中必须完全实现基类的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。
- 关于多态性和虚函数的理解
- 对 c++多态性和虚函数的理解
- 13.1 对虚函数、多态性和抽象类的理解
- 初步理解多态性和虚函数
- 关于JAVA多态性的理解
- 多态性和虚函数
- 虚函数和多态性
- 虚函数和多态性
- 虚函数和多态性
- 多态性和虚函数
- 多态性和虚函数
- 多态性和虚函数
- 多态性和虚函数
- 多态性和虚函数
- 虚函数和多态性
- 多态性和虚函数
- 多态性和虚函数
- 多态性和虚函数
- XML 解析 四种方式
- xcode 4 制作静态库详解
- 雷锋读图:网页设计师 VS. 网页开发者
- web.xml中listener的作用及使用
- 网上找的一个不错的html颜色选择器
- 关于多态性和虚函数的理解
- 开通博客第一天
- JS验证插件
- 减治法算法设计
- “项目集管理标准体系与PgMP认证”讲座笔记
- eclipse中导入mysql包的方法
- 你必须知道的.net(1)
- MIPS GCC 嵌入式汇编
- 跑马灯