位置: IT常识 - 正文

深入理解 virtual 关键字(深入理解linux内核)

编辑:rootadmin
为什么会写这篇文章?主要是因为项目中的代码大量使用了带virtual关键字的类,想通过本文浅谈一下。virtual并没有什么超能力可以化腐朽为神奇,它有其存在的理由,但滥用它是一种非常不可取的错误行为。本文将带你一步一步了解virtual机制,为你揭开virtual的神秘面纱。 ...

推荐整理分享深入理解 virtual 关键字(深入理解linux内核),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入理解中国式现代化心得体会,深入理解中国式现代化论文,深入理解计算机系统,深入理解中国式现代化,深入理解计算机系统 第三版 pdf,深入理解java虚拟机,深入理解计算机系统,深入理解计算机系统 第三版 pdf,内容如对您有帮助,希望把文章链接给更多的朋友!

深入理解 virtual 关键字(深入理解linux内核)

引言

为什么会写这篇文章?主要是因为项目中的代码大量使用了带virtual关键字的类,想通过本文浅谈一下。virtual并没有什么超能力可以化腐朽为神奇,它有其存在的理由,但滥用它是一种非常不可取的错误行为。本文将带你一步一步了解virtual机制,为你揭开virtual的神秘面纱。

为什么需要virtual

假设我们正在进行一个公共图形化库的设计实现,其中涉及2d和3d坐标点的打印,设计出Point2d和Point3d的实现如下:

#include <stdio.h>class Point2d {public: Point2d(int x = 0, int y = 0): _x(x), _y(y) {} void print() const { printf("Point2d(%d, %d)\n", _x, _y); }protected: int _x; int _y;};class Point3d : public Point2d {public: Point3d(int x = 0, int y = 0, int z = 0):Point2d(x, y), _z(z) {} void print() const { printf("Point3d(%d, %d, %d)\n", _x, _y, _z); }protected: int _z;};int main() { Point2d point2d; Point3d point3d; point2d.print(); //outputs: Point2d(0, 0) point3d.print(); //outputs: Point3d(0, 0, 0) return 0;}

完美,一切都符合预期。既然如此,我们为什么需要virtual?让我们提个新需求:封装一个坐标点打印接口,输入是坐标点实例,输出是坐标点的值。很快,我们实现了代码:

void print(const Point2d &point) { point.print();}int main() { Point2d point2d; Point3d point3d; print(point2d); //outputs: Point2d(0, 0) print(point3d); //outputs: Point2d(0, 0) return 0;}

问题来了,当我们传入3d坐标点实例时,我们的期望是打印3d坐标点的值,而实际只能打印2d坐标点的值。现在的程序分不清坐标点是2d还是3d,为了让程序变得更聪明,需要对症下药,而virtual正是该症的药方。只需要更新Point2d接口print的

本文链接地址:https://www.jiuchutong.com/zhishi/309265.html 转载请保留说明!

上一篇:帝国CMS二次开发基本问题有哪些(帝国cms源码)

下一篇:python能读取tsv吗(python读取text)

  • 怎么应对降税,不含税价怎么应对
  • 增值税发票认证在哪里
  • 两年前的发票可以补开吗
  • 工商年报认缴时间填错了
  • 实收资本利息收入可以资本化
  • 股权变更后税务需要变更吗
  • 质量体系证费用计入什么科目
  • 租赁厂房电费
  • 科技公司增值税率是多少
  • 存货转固定资产的时点
  • 预付房租租金如何做账
  • 挂靠工程如何交纳税金帐务处理?
  • 资本公积转实收资本会计科目
  • 物业前期介入费用测算
  • 公司在走注销流程被起诉了怎么办
  • 餐费报销需要发票吗
  • 什么情况下可以收取现金
  • 物业费属于什么合同
  • 购买汽车车辆购置税个人垫付,企业付给个人的附件归属
  • 进项构成比例是啥
  • 银行代扣社保怎么做会计分录
  • 接受应税劳务的会计分录
  • 资本公积 税务
  • 职工福利费扣除限额
  • 企业发工资扣缴个人承担部分如何做账?
  • efi bios u盘启动
  • php自定义变量
  • 电压是什么量
  • algarin.exe什么意思
  • 使用php进行mysql数据库编程的基本步骤
  • 申请一般纳税人流程
  • 购买货物收到发票财务报表怎么提现
  • 葡萄牙海岸风光
  • 车子的保险费
  • php写json
  • jdbc连接mysql数据库不成功
  • PHP+mysql+ajax轻量级聊天室实现方法详解
  • 关于持股平台的法律法规
  • 售后租回怎么理解
  • 进项税额计入其他流动资产
  • 融资租赁怎么计税
  • 销售时的赠品怎么做账
  • 当月未付款算在次月吗
  • 租赁公司一般都有什么税
  • 会计科目累计摊销
  • 在windowsxp的应用程序中,经常
  • 办公室装修 会计分录
  • 核定征收的三种方式
  • 小规模差额征税的账务处理
  • 如何计提本年度工资总额
  • 汇算清缴期间费用福利费填哪里
  • 避险功能是什么意思
  • 即征即退的增值税退城建税吗
  • 网上打印的电子机票可以报销不
  • 客房服务费可以开发票吗
  • 两家公司
  • 工业营业收入含税吗
  • win10系统迅雷
  • ubuntu系统怎么修改ip地址
  • 苹果电脑 输入
  • centos7编译安装内核
  • windows越狱软件
  • win10 怎么恢复
  • macbook key
  • 各种linux系统比较
  • win7系统运行在哪
  • linux批量处理
  • linux的关闭命令
  • css设置最大高度
  • python数据结构教程
  • 每天看30分钟手机可以吗
  • shell脚本实例精讲
  • python 随机ua
  • jquery父节点
  • jquery的动画效果
  • python自动化验证码
  • node.js的express
  • 东莞市电子税务局app
  • 上海税务网厅
  • 漯河经济开发区税务局电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设