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

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()

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

相关文章:

  • 强化学习(十一)探索与利用
  • FastAPI 中间件
  • 关于模型记忆力的实现方式
  • 令牌桶算法——流量控制和限流
  • 【AI News | 20250526】每日AI进展
  • SpringAI(GA):Tool工具整合—快速上手
  • 如何实现 C/C++ 与 Python 的通信
  • 云化全场景+AI智算双擎驱动,打造高教数智化转型新范式,麒麟信安闪耀第63届高等教育博览会!
  • 25盘古石初赛wp(部分)
  • 回调函数的使用
  • Android磁盘占用优化全解析:从监控到治理的存储效率革命
  • [特殊字符]《Qt实战:基于QCustomPlot的装药燃面动态曲线绘制(附右键菜单/样式美化/完整源码)》
  • 基于GitHub Actions+SSH+PM2的Node.js自动化部署全流程指南
  • 华为云Flexus+DeepSeek征文 | 体验简单高效的模型推理开通之旅
  • 如何做好一份技术文档
  • Python入门手册:循环
  • 【人工智能-agent】--使用python调用dify工作流
  • AI学习笔记二十八:使用ESP32 CAM和YOLOV5实现目标检测
  • 【Java工程师面试全攻略】Day2:Java集合框架面试全解析
  • 机试 | STL | string | 文字处理软件
  • 云南网站开发报价/seo名词解释
  • 武汉网站建设/seo关键词排名
  • 天津低价做网站/外包网络推广营销
  • 强的网站建设/淘宝seo优化怎么做
  • 西安网站seo价格/百度店面定位怎么申请
  • wordpress基础服务器/甘肃seo网站