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

C++ 58 之 计算器案例

 虚函数,vitual function

C++动态多态性是通过虚函数来实现的,虚函数允许子类(派生类)重新定义父类(基类)成员函数,而子类(派生类)重新定义父类(基类)虚函数的做法称为覆盖(override),或者称为重写。

对于特定的函数进行动态绑定,c++要求在基类中声明这个函数的时候使用virtual关键字,动态绑定也就对virtual函数起作用.

#include <iostream>
#include <string>
using namespace std;class Cal {
public:int m_a;int m_b;virtual int getRes(){return 0;}
};// 加法  子类要重写父类的虚函数
class Add : public Cal {
public:virtual int getRes(){return m_a + m_b;}
};// 减法
class Sub : public Cal {
public:int getRes(){return m_a - m_b;}
};int main()
{// 多态可以改善代码的可读性和组织性,同时也可以让程序具有可扩展性// 动态多态产生条件:// 1.要有继承关系// 2.父类中有虚函数、子类要重写父类的虚函数// 3.父类的指针或引用指向子类的对象// 加法:写法1 指针 // Cal* c1 = new Add;  // 函数名一样,但对象不一样,就执行不同对象里的函数 多态// c1->m_a = 1;// c1->m_b = 2;// cout << c1->getRes() << endl;// delete c1;// c1 = NULL;// 减法:写法1 指针// Cal* c1 = new Sub;// c1->m_a = 1;// c1->m_b = 2;// cout << c1->getRes() << endl;// delete c1;// c1 = NULL;// 加法:写法2 引用Add a1;Cal& c1 = a1;c1.m_a = 1;c1.m_b = 2;cout << c1.getRes() << endl;// 减法:写法2 引用Sub s1;Cal& c2 = s1;c2.m_a = 1;c2.m_b = 2;cout << c2.getRes() << endl;return 0;
}

 

相关文章:

  • 模板方法模式(大话设计模式)C/C++版本
  • Python:基础爬虫
  • 【odoo17】富文本小部件widget=“html“的使用
  • sqli-labs 靶场 less-7 第七关详解:OUTFILE注入与配置
  • 英伟达开源 3400 亿参数模型;苹果 iOS 18 紧急 SOS 新增实时视频功能丨 RTE 开发者日报 Vol.225
  • VB.net调用VC DLL
  • 实战 | 基于YOLOv10的车辆追踪与测速实战【附源码+步骤详解】
  • 智慧工厂监控可视化解决方案(160页WORD)
  • 从零开始学GeoServer源码(一)(搭建开发环境Win10+IDEA23.3.5+jdk11+geoserver2.24.x)
  • Zenity向Ubuntu系统发送通知
  • 安全测试入门基础大全。。费了大功夫整理(超级全面)
  • [AIGC] Java List接口详解
  • 从0到1实现YOLOv3
  • linux在文件夹中查找文件内容
  • MySql 数据库、表常用语句
  • 【Leetcode】101. 对称二叉树
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [译]CSS 居中(Center)方法大合集
  • Apache的80端口被占用以及访问时报错403
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ES6--对象的扩展
  • java8 Stream Pipelines 浅析
  • js
  • Median of Two Sorted Arrays
  • Ruby 2.x 源代码分析:扩展 概述
  • SpringBoot几种定时任务的实现方式
  • 不上全站https的网站你们就等着被恶心死吧
  • 初识 webpack
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 解析带emoji和链接的聊天系统消息
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 用 Swift 编写面向协议的视图
  • hi-nginx-1.3.4编译安装
  • 数据库巡检项
  • ### RabbitMQ五种工作模式:
  • (1)(1.11) SiK Radio v2(一)
  • (3)STL算法之搜索
  • (4)(4.6) Triducer
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (六)软件测试分工
  • (四)鸿鹄云架构一服务注册中心
  • (转)Unity3DUnity3D在android下调试
  • (转)关于多人操作数据的处理策略
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET分布式缓存Memcached从入门到实战
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Conditional注解详解
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [C++基础]-初识模板