首页 > 其他分享 >什么是纯虚函数?

什么是纯虚函数?

时间:2023-02-19 23:56:39浏览次数:35  
标签:f2 f3 定义 什么 Base 纯虚 函数

纯虚函数是指不必在基类中定义,但必须在派生类中被覆盖(override)的函数。通过新奇的“=0”语法可将虚函数声明为纯虚函数。例如:

 class Base {
                public:
                        void f1();                         // 不是虚函数
                        virtual void f2();         // 是虚函数,但不是纯虚函数
                        virtual void f3() = 0;  // 纯虚函数
                };

                Base b; // error: pure virtual f3 not overridden

在此,Base 是抽象类(因为它有一个纯虚函数),所以不能直接用它来定义对象:Base(很显然)是用来做基类的。例如:

class Derived : public Base {
                        // 没有定义 f1:没关系
                        // 没有定义 f2:没关系,继承了 Base::f2
                        void f3();
                };

                Derived d; // ok: Derived::f3 覆盖了 Base::f3

抽象类是定义接口的非常好的工具。事实上,一个只有纯虚函数的类通常被称为接口。

当然你也可以定义纯虚函数:

Base::f3() { /* ... */ }

这样做往往意义不大(虽然这样做可为派生类提供一些简单的公共代码),而且在派生类中仍然需要覆盖 Base::f3()。

如果你没有在派生类中覆盖纯虚函数,那该派生类也是抽象类:

 class D2 : public Base {
                        // 没有定义 f1:没关系
                        // 没有定义 f2:没关系,继承了 Base::f2
                        // 没有定义 f3:没关系,但 D2 因此也是抽象类
                };

                D2 d; // 错误:没有覆盖纯虚函数 Base::f3

标签:f2,f3,定义,什么,Base,纯虚,函数
From: https://www.cnblogs.com/wozhuyinghao/p/17135969.html

相关文章

  • JavaScript回调函数
    回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码。在JavaScript中函数也是对象的一种,同样对象可以作为参数传......
  • Java String为什么不可变?
    publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{privatefinalcharvalue[]; //...}String类中使用final......
  • MongoDB与Redis可以做什么
    1、MongoDB适合做什么MongoDB适合储存大量关联性不强的数据。MongoDB中的数据以“库”—“集合”—“文档”—“字段”结构进行储存。这种结构咋看和传统关系型数据库的“......
  • exec函数簇
    exec函数是为了在子进程中执行其他的可执行程序(代码替换)子进程调用exec函数并不创建新的进程,所以前后进程的ID不会改变,exec函数只是用另一个新程序代替当前进程的正文、数......
  • 为笛卡尔积运算而生的Reduce(Excel函数集团)
    我要是没记错,Reduce这词是减少的意思,可是当他作为Excel函数出现时,我真没看出哪里Reduce了……好吧,其实可以换种理解,缩减了嵌套(帮助里写的是“将数组缩减为累计值)。来来来......
  • 浅谈strtok函数的原理与使用
    对于strok函数的理解,自己也是很迷茫,尤其看到有的范例将第一参数设为NULL也很是不解,也是找了许多博文,并看了官方的英文文档才浅显地理解了。这位前辈的博文对我启发很大。链......
  • 【JavaScript】17_debug,立即执行函数 与 严格模式
    14、debug<script>//debugger//在代码中打了一个断点console.log(a)//2vara=1console.log(a)//1fu......
  • 第六章 函数
    第六章函数函数基础函数定义:包括返回类型、函数名字和0个或者多个形参(parameter)组成的列表和函数体。调用运算符:调用运算符的形式是一对圆括号(),作用于一个表达式,该......
  • 前端日常一问:说说你对用户权限管理的理解,你们公司的解决方案是什么?知道rbac吗?
    I.用户权限管理概述A.用户权限管理的定义用户权限管理是指在系统中对用户进行身份认证和授权,以确定他们能够执行哪些操作和访问哪些资源。这包括限制用户可以执行的操......
  • 超级浏览器有什么功能和价值
    简单来说,超级浏览器的核心价值就是为让同一台电脑上的不同账户实现环境隔离。所以,超级浏览器是一种多个账号在同一台设备上执行多个任务,不会互相干扰的浏览器。这种浏览器主......