码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ 虚函数


    目录

    基本概念

    示例代码

    实现原理

    纯虚函数


    基本概念

    ——virtual 修饰的函数是虚函数,表示可以被重写

    ——virtual 只能在函数内部声明或定义,不能出现在类的外部 

    ——override 后缀,可以强制检测函数是重载

    ——final 后缀,终止函数的重载

    ——类对象无法调用虚函数,必须使用类指针

    ——虚函数在子类和父类中必须拥有相同的参数列表和返回值(指针除外)

    ——虚函数不能是函数模板

    示例代码

    1. #include
    2. using namespace std;
    3. //virtual 虚函数
    4. //override 可以强制要求检测函数是重载
    5. //final 可以终止函数的重载
    6. class MoveObject
    7. {
    8. public :
    9. virtual void Move()
    10. {
    11. cout << "我是基类" << endl;
    12. }
    13. };
    14. class NPCObject : public MoveObject
    15. {
    16. public :
    17. void Move() override
    18. {
    19. cout << "我是NPC" << endl;
    20. }
    21. };
    22. class MonsterObject : public MoveObject
    23. {
    24. public:
    25. void Move() override
    26. {
    27. cout << "我是怪物" << endl;
    28. }
    29. };
    30. void Move(MoveObject *obj)
    31. {
    32. obj->Move();
    33. }
    34. int main()
    35. {
    36. MonsterObject snake;
    37. NPCObject npc;
    38. Move(&snake);
    39. Move(&npc);
    40. system("pause");
    41. return 0;
    42. }

    实现原理

    虚函数表——每个包含了虚函数的类都包含一个虚表。 x86下为4字节,指向虚函数表的地址,虚函数表的地址记录了该类重写的虚函数地址。x64下为8字节。

    纯虚函数

    语法:virtual 返回值类型 函数名(参数列表)=0,当类中有了纯虚函数,这个类也称抽象类。

    抽象类特点: 无法实例化对象,子类必须重写抽象类中的纯虚函数,否则也属于抽象类。

  • 相关阅读:
    短时间内防止多次点击
    【LeetCode】LRU 缓存 [M](LRU内存替换算法)
    7、使用Maven:IDEA环境
    Akshare获取分红数据
    LangChain之关于RetrievalQA input_variables 的定义与使用
    云计算平台上的DevOps实践
    QT之可自由折叠和展开的布局
    Verilog 时序控制
    Jtti:Ubuntu下如何迁移Thunderbird邮件
    OpenWRT篇——篇:Ubox——list.h
  • 原文地址:https://blog.csdn.net/weixin_40582034/article/details/126013766
  • 最新文章
  • OpenClaw Dreaming 记忆流水线底层架构:状态分层、证据留痕与检索回流
    .NET 10 桌面 UI 框架的范式演进:Jalium.UI 与 MewUI 架构深度对比
    [对比学习LangChain和MAF-02]基本编程模式的差异(下篇)
    我的编程经历,从天桥地摊Basic到西藏阿里的.Net AOT。(续二)
    House of botcake与IOFILE任意读写
    Markdown锚点跳转失败的解决办法
    "Sample Is Feature: Beyond Item-Level, Toward Sample-Level Tokens for Unified Large Recommender Models" 论文笔记
    拒绝宕机!用 Python 优雅榨干百万级 GIS 点矢量的裁剪极限
    PyTorch KernelAgent 源码解读 ---(5)--- Dispatcher
    PerryTs初探(一): Windows端安装perry.ts
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号