文章目录

  • 虚函数与纯虚函数
    • 概念
    • 普通计数器
    • 多态计算器
  • 其他

虚函数与纯虚函数

概念

首先:强调一个概念
定义一个函数为虚函数,不代表函数为不被实现的函数。
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。

定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

普通计数器

普通计数器

class Calculator
{public:void setv1(int v){this->val1 = v;}void setv2(int v){this->val2 = v;}int getResult(string oper){if (oper == "+"){return val1 + val2;}else if (oper == "-"){return val1 - val2;}}
private:int val1;int val2;};void test01()
{Calculator cal;cal.setv1(10);cal.setv2(10);cout << cal.getResult("+") << endl;cout << cal.getResult("-") << endl;}

多态计算器

真正的开发中,有个开发原则开闭原则

  • 对扩展开放
  • 对修改关闭

多态计算器代码

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;//利用多态实现计算器
class abstractCalculator
{public://虚函数 virtual int getResult(){ return 0; };//纯虚函数//如果父类中有了 纯虚函数  子类继承父类,就必须要实现 纯虚函数//如果父类中 有了 纯虚函数 ,这个父类 就无法实例化对象了//这个类有了纯虚函数,通常又称为 抽象类virtual int getResult() = 0;void setv1(int v){this->val1 = v;}void setv2(int v){this->val2 = v;}public:int val1;int val2;};//如果父类中有了 纯虚函数  子类继承父类,就必须要实现 纯虚函数
class A :public abstractCalculator
{public:virtual int getResult(){return 0;}
};//加法计算器
class PlusCalculator :public abstractCalculator
{public:virtual int getResult(){return val1 + val2;};
};
class SubCalculator : public abstractCalculator
{public:virtual int getResult(){return val1 - val2;};
};
class ChengCalculator :public abstractCalculator
{public:virtual int getResult(){return val1 * val2;};};void test02()
{abstractCalculator* abc;//加法计算器abc = new PlusCalculator;abc->setv1(10);abc->setv2(20);cout << abc->getResult() << endl;delete abc;abc = new SubCalculator;abc->setv1(10);abc->setv2(20);cout << abc->getResult() << endl;delete abc;abc = new ChengCalculator;abc->setv1(10);abc->setv2(20);cout << abc->getResult() << endl;//如果父类有了纯虚函数,不能实例化对象了//abstractCalculator aaa;//abstractCalculator * abc = new abstractCalculator;}int main() {//test01();test02();system("pause");return EXIT_SUCCESS;
}

其中,virtual int getResult(){ return 0; };是虚函数,virtual int getResult() = 0;是纯虚函数。

其他

虚函数和纯虚函数的区别

c++从入门到精通——虚函数与纯虚函数相关推荐

  1. c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)

    目录 4.7 多态 4.7.1 多态的基本概念(超级重要) 4.7.2 多态的原理刨析(超级重要) 4.7.2 多态案例一:计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 ...

  2. 但并不从包含函数声明的接口派生_C++的虚函数和纯虚函数

    虚函数:类成员函数前面添加virtual关键字,则该函数被称为虚函数. 纯虚函数:在虚函数的基础上,在函数末尾加上 = 0. class Animal {public: virtual void Sh ...

  3. 一口气搞懂《虚函数和纯虚函数》

    学习C++的多态性,你必然听过虚函数的概念,你必然知道有关她的种种语法,但你未必了解她为什么要那样做,未必了解她种种行为背后的所思所想.深知你不想在流于表面语法上的蜻蜓点水似是而非,今天我们就一起来揭 ...

  4. C++知识点51——虚函数与纯虚函数(下)

    接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109957146 10.练习 示例 class base { public:base() ...

  5. C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别

    C++ 在继承中虚函数.纯虚函数.普通函数,三者的区别 1.虚函数(impure virtual) C++的虚函数主要作用是"运行时多态",父类中提供虚函数的实现,为子类提供默认的 ...

  6. 虚函数与纯虚函数的区别

    虚函数:为了方便使用多态特性,常常需要在基类中定义虚函数. 纯虚函数: 1.原因与虚函数相同: 2.在很多情况下,基类本身生成的对象是不合理的: 虚函数与纯虚函数的区别: 1.类里声明为虚函数的话,这 ...

  7. 虚函数和纯虚函数的区别

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  8. C++ 虚函数和纯虚函数的区别

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...

  9. (转)虚函数和纯虚函数区别

    在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念.因为它充分体现 了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广.比如在微软的MFC类库中,你 ...

最新文章

  1. 特斯拉自动驾驶新能力:识别红绿灯停车标识;尝鲜车主:实用好用
  2. linux ioctl 设备操作函数 r3到r0 应用层 驱动层 通讯
  3. 数据中心管理将成为未来十年所需的技能
  4. 图像处理学习--前篇--像素相关
  5. 第一讲,Python的安装(干货)
  6. 检索数据_20_按照字符串数字组合的排序
  7. 【STM32】FreeRTOS任务相关API
  8. MySQL的join类型
  9. 在移动端项目中使用vconsole
  10. x210-II WinCE启动10s,还可继续优化
  11. mybatis sql xml 字符逃脱
  12. CentOS7 设置IP、源、SSH密钥登录、自动补全、防火墙
  13. java迷题_Java——类谜题
  14. php里无法找到该网页,thinkphp搭建网站后端,入口文件找不到(无法加载)
  15. css伪类设置小标签
  16. python列表和字典的区别_Python中列表和字典有什么区别,分别适用于什么场景?...
  17. MapBox本地化部署
  18. linux下bluetooth编程(一)基础概念
  19. Sophos防火墙v18版本访问内部服务器或者电脑SNAT地址转换的问题解决办法
  20. 51单片机 11.0592MHz 产生115200 波特率

热门文章

  1. 就这? Scrapy框架被我用了个遍,结果只制作了表情包!
  2. Prompt 学习和微调综述 (Prompt Learning and Tuning)
  3. 选择万德L2接口需要遵循什么原则?
  4. GLSL语言OpenGLES(三)
  5. 【慢慢】V6.03.1 读书笔记 css字体
  6. 做项目一定用得到的NLP资源【分类版】
  7. 羡慕实时数据看板?来看看Python的交互数据分析可视化工具! ⛵
  8. keil在线下载pack包
  9. BF(Best-first)算法
  10. <8>Linux中的软件管理2021-10-17