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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的文章
NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
查看>>
numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
查看>>
numpy 数组与矩阵的乘法理解
查看>>
numpy 用法
查看>>
Numpy 科学计算库详解
查看>>
Numpy.ndarray对象不可调用
查看>>
Numpy如何使用np.umprod重写range函数中i的python
查看>>
numpy数组索引-ChatGPT4o作答
查看>>
numpy转PIL 报错TypeError: Cannot handle this data type
查看>>
NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现
查看>>
oauth2-shiro 添加 redis 实现版本
查看>>
OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
查看>>
OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
查看>>
OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
查看>>
OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
查看>>
OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
查看>>
OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
查看>>
OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
查看>>
OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
查看>>
OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
查看>>