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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的文章
pip install 出现报asciii码错误的解决
查看>>
pip throws TypeError: parse() got an unexpected keyword argument ‘transport_encoding‘ 在尝试安装新软件包时
查看>>
pip 下载慢
查看>>
pip 升级报错AttributeError: ‘NoneType’ object has no attribute ‘bytes’
查看>>
pip 安装opencv-python卡死
查看>>
pip 安装出现异常
查看>>
Pip 安装失败:需要 SSL
查看>>
Pip 安装挂起
查看>>
pip 或 pip3 为 Python 3 安装包?
查看>>
pip 文件损坏导致 pip无法使用 报错 ImportError: cannot import name 'main' from 'pip._int
查看>>
pip/pip3更换国内源
查看>>
pip3 install PyQt5 --user 失败
查看>>
pip3命令全解析:Python3包管理工具的详细使用指南
查看>>
pip3安装命令重复创建文件‘/tmp/pip-install-xxxxx/package‘失败
查看>>
PIPE 接口信号列表
查看>>
pipeline配置与管理Job企业级实战
查看>>
pipeline项目配置实战
查看>>
Pipenv 与 Conda?
查看>>
QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
查看>>
pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。
查看>>