热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

C++多态原理纸上谈兵

继承召唤多态。多态就是多种形态。因继承而生创建出的对象理所当然地拥有其基类的所有成员,所以从本质上来说,它既可以被称为是子类的对象,又可以

继承召唤多态。多态就是多种形态。因继承而生创建出的对象理所当然地拥有其基类的所有成员,所以从本质上来说,它既可以被称为是子类的对象,又可以被称为是父类的对象。如果子类和父类中定义了完全相同的两个成员函数,又对新创建的子类对象调用这个成员函数,那么就会分不清是调用基类的还是子类的。解决办法是虚函数机制。

将基类函数标记为virtual虚函数,编译时则暂时将绑定对象这一步滞后(没运行前不知道是子类还是基类),而是做一个向即将绑定的该实际对象的成员函数的间接访问。那么在运行时,就能根据情况选择子类函数还是基类函数。虚函数是自动继承的,但要分清虚函数和重载的关系。虚函数之间必须完全相同,重载是参数不同。重载是确定的,编译器在编译的时候就能根据参数的情况准确判断该函数属于基类还是子类,但虚函数无法被判断,必须滞后到运行时处理。对于虚函数,有个返回类型的例外,就是当虚函数仅有返回类型不同,且返回类型之间是基类和子类的关系,则仍能识别(理解起来,就是我传给你的基类你返回就是基类,传进去子类就返回子类)。静态成员函数、内联函数、构造函数不是虚函数。析构函数常声明为虚函数。虚函数和虚继承有区别。虚继承是解决多继承中成员变量或成员函数命名冲突问题的,用虚继承的派生类,在构造的时候就只会保留继承的一份类成员。虚继承跟基类基本没影响,是子类构建的时候才会生效。

多态性还体现在类型转换。定义的沙发床类有的时候我想让它表现出家具的特性,有的时候想表现出沙发床的特性,这就要多态地识别类型。动态转型dynamic_cast专门针对有虚函数的继承结构,静态转型static_cast就可以更广。


推荐阅读
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • C++构造函数与初始化列表详解
    本文深入探讨了C++中构造函数的初始化列表,包括赋值与初始化的区别、初始化列表的使用规则、静态成员初始化等内容。通过实例和调试证明,详细解释了初始化列表在对象创建时的重要性。 ... [详细]
  • andr ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文深入探讨了C++对象模型中的一些细节问题,特别是虚拟继承和析构函数的处理。通过具体代码示例和详细分析,揭示了书中某些观点的不足之处,并提供了更合理的解释。 ... [详细]
  • 本文详细介绍了Debian及其衍生发行版中如何通过/etc/network/interfaces文件进行网络接口的配置,对比了Red Hat系系统的不同之处,并提供了多种常见配置示例及解析。 ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
author-avatar
mobiledu2502929697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有