当前位置: 首页 > web >正文

C++虚函数和纯虚函数

纯虚函数的概念

在 C++ 里,纯虚函数是在基类中声明但没有具体实现的虚函数,其声明结尾用= 0表示。
像这样的函数:
cpp
class Base {
public:
virtual void func() = 0; // 这是一个纯虚函数
};

编译时的核查

当一个类包含纯虚函数时,编译器会把这个类标记为抽象类。
在编译阶段,如果尝试实例化一个抽象类,比如进行Base obj;这样的操作,编译器会直接报错,阻止这一行为。

虚函数表(VTable)机制

对于包含虚函数的类,编译器会为其创建虚函数表,这个表中存储着类成员函数的地址。
纯虚函数在虚函数表中对应的是一个未定义的条目,或者说是一个占位符。
由于没有具体的函数实现,实例化对象后无法正确调用纯虚函数。

抽象类的作用

抽象类的主要用途是为派生类提供统一的接口规范,它本身并不实现具体功能。
派生类必须实现基类中的所有纯虚函数,才能成为具体类,进而被实例化。
例如:
cpp
class Derived : public Base {
public:
void func() override { /* 这里实现具体功能 */ } // 实现了纯虚函数
};

// 此时可以实例化 Derived 类
Derived d; // 没问题

编译错误示例

若尝试实例化抽象类Base,会得到类似这样的编译错误:
plaintext
error: cannot declare variable ‘obj’ to be of abstract type ‘Base’
note: because the following virtual functions are pure within ‘Base’:
note: virtual void Base::func()

总结:纯虚函数之所以不能实例化,是因为它没有具体的实现,使得包含它的类成为抽象类。而抽象类的虚函数表不完整,缺少纯虚函数的地址,所以编译器会禁止其实例化,以此保证类型系统的安全性。

http://www.xdnf.cn/news/9167.html

相关文章:

  • 云原生技术在企业数字化转型中的战略价值与实践路径
  • MySql(三)
  • 高精度装配人形机器人|产品参数详细介绍
  • Day03
  • 架空线路智能云台监控系统介绍
  • 大数据学习(122)-分区与分桶表
  • 【前端】Proxy对象在控制台中惰性求值_vue常见开发问题
  • AI换场景工具:图生生1分钟完成电商商拍
  • Vue 样式穿透(深度选择器)::v-deep
  • 多空间投影:提示微调的革命性突破
  • 车载通信网络 --- OSI模型中物理层和数据链路层
  • 【Netty】- 聊天室1
  • sse和streamablehttp
  • 基于Windows原生工具搭建本地文件服务器 IIS(Internet Information Services)​
  • STM32G0xx基于串口(UART)Ymodem协议实现OTA升级包括Bootloader、上位机、应用程序
  • 两个Ubuntu机器(内网)免密登录设置
  • MFC: 文件加解密(单元测试模块)
  • 如何做好一份“系统设计“文档
  • 2025河北秦皇岛CCPC补题
  • I/O外设管理(第七章)
  • 本周 edu教育邮箱注册可行方案
  • Python函数异常处理底层实现原理
  • 机器学习-朴素贝叶斯分类
  • Partial Overwrite绕过PIE保护-[HNCTF 2022 WEEK2]ret2text
  • 将docker数据目录迁移到 home目录下
  • 军事大模型及其应用分析
  • 电脑清理重复文件秒扫 + 相似媒体去重 找出空文件夹 / 损坏文件 批量清理
  • 从比分滚动到数据革命:体育数据如何重构我们的观赛体验?
  • 【运维】Zerotier删除节点后的恢复操作指南
  • ASP.NET Core OData 实践——Lesson2增删改查Entity和EntitySet(C#)