博客
关于我
C++学习日记1——多态篇的虚函数
阅读量:544 次
发布时间:2019-03-09

本文共 1143 字,大约阅读时间需要 3 分钟。

多态性在软件工程中,多态性是指一种对象的多种行为该行为可以根据其具体的类型被选择。这种行为概念在面向对象编程中尤为重要,特别是在继承关系中。

多态类型多态类型指的是具有继承关系的多个类型。这意味着如果一个基类定义了一些成员函数,那么在派生类中可能会覆盖或扩展这些成员函数。

虚函数虚函数是解决多态性问题的标准方法。当你以基类指针指向派生类对象时,你只能访问基类定义的成员函数,除非基类中定义了虚函数。虚函数通过构建一个虚函数表来解决这个问题,使得系统能够在运行时根据对象的实际类型调用正确的函数。

同名成员函数如果基类和派生类同时定义了同名成员函数,那么调用时会调用哪一个?其实这取决于虚函数的状态。虚函数的存在将确保调用的是派生类的函数,而不是基类的。虚函数可以用来覆盖基类的同名函数。

虚析构函数在动态多态中,使用虚析构函数可以避免内存泄漏。当一个派生类对象被分配给了一个基类指针时,基类的析构函数可能无法正确释放派生类对象中的内存。虚析构函数会允许派生类先释放其自己的资源,然后基类的析构函数才能被调用。

虚函数的用法在C++中,虚函数可以用来生 مانند这样:在基类中声明虚函数,然后在派生类中重新声明或实现这些函数。但请记住,虚函数只适用于在子类中定义,而不是用于全局函数。

继承虚函数在C++中,继承虚函数的正确做法是确保基类中的函数或析构函数都有虚关键字。这样在派生类中,默认就会继承这些虚函数。如果基类没有声明虚函数,那么派生类也不会有相应的虚函数表,这可能导致无法正确多态。

函数的覆盖和隐藏在多态性中,有名函数的覆盖意味着派生类实际调用的是其自己的函数,而不是基类的。这与隐藏不同,隐藏是让派生类的函数完全覆盖基类的函数,除非被显式调用。虚函数的存在通常意味着函数被覆盖,而不是隐藏。

虚函数表虚函数表在对象中存储函数入口地址,当基类中有虚函数时,虚函数表会自动生成。每个类只有一个虚函数表,所有对象共享同一表。如果派生类中没有定义虚函数,那么它会自动继承基类的虚函数表。

虚析构函数的原理虚析构函数的作用是让派生类的析构函数先被调用,这确保所有派生类的资源都被正确释放,然后基类的析构函数才被调用。这样就避免了内存泄漏的问题,特别是在动态分配内存时。

对象大小sizeof()操作符返回的是对象的大小,包括成员数据的大小。对于没有数据成员的对象,默认会分配一个字节内存。然而,如果类中有虚函数或虚析构函数,对象仍然会分配额外的内存来存储虚函数表指针,这会增加对象的大小(通常是4字节)。

理解多态性与虚函数多态性是面向对象编程中的一个核心概念,允许同一类实例根据其类型进行不同的行为。在C++中,虚函数就是实现多态性机制的关键工具,通过构建虚函数表来实现这一点。

转载地址:http://fjzsz.baihongyu.com/

你可能感兴趣的文章
Postman轻松签名,让SHA256withRSA保驾护航
查看>>
Postman还能做Mock?又学了一招!
查看>>
Postman还能做Mock?又学了一招!
查看>>
postman进行http接口测试
查看>>
Postman高阶技能:Collection集合批量运行!
查看>>
postMessage跨标签页共享数据
查看>>
QImage对一般图像的处理
查看>>
post为什么会发送两次请求?
查看>>
Post表单提交TextArea的值出现转译乱码问题 - Spring MVC处理表单提交
查看>>
Power BI 中的 Python 可视化需要什么设置?任何特定的 matplotlib 包版本或系统设置?
查看>>
Power BI:如何在 Power Query 编辑器中将 Python 与多个表一起使用?
查看>>
power english (3) main text -emotion mastery - focus
查看>>
POWER ENGLISH (6) - MODEL
查看>>
power english (1) —— passion
查看>>
Power English (1) 原文
查看>>
power English (3)原文
查看>>
POWER ENGLISH(7)- repetition
查看>>
SpringBoot中集成SpringBatch详细解析与实战示例(CSV文件读取十万条数据进行业务处理后写入Mysql数据库)
查看>>
powerbi 一张表在另外一张表中出现的数量_PowerBi之初步学习笔记
查看>>
QGIS怎样设置简体中文以及新建可编辑的多边形的图层
查看>>