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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的文章
nvm切换node版本
查看>>
nvm安装 出现 Error retrieving “http://xxxx/SHASUMS256.txt“: HTTP Status 404 解决方法
查看>>
nvm安装以后,node -v npm 等命令提示不是内部或外部命令 node多版本控制管理 node多版本随意切换
查看>>
NXLog采集windows日志配置conf文件
查看>>
ny540 奇怪的排序 简单题
查看>>
NYOJ -216 A problem is easy
查看>>
NYOJ 1066 CO-PRIME(数论)
查看>>
NYOJ 737:石子合并(一)(区间dp)
查看>>
nyoj 91 阶乘之和(贪心)
查看>>
nyoj------203三国志
查看>>
NYOJ-525 一道水题
查看>>
NYOJ127星际之门(一)
查看>>
nyoj58 最少步数
查看>>
N皇后问题
查看>>
N皇后问题
查看>>
n种方式教你用python读写excel等数据文件
查看>>
OAuth 2.0 MAC Tokens
查看>>
OAuth 及 移动端鉴权调研
查看>>
OAuth2 + Gateway统一认证一步步实现(公司项目能直接使用),密码模式&授权码模式
查看>>
OAuth2 Provider 项目常见问题解决方案
查看>>