为什么我们在c++中需要接口或纯虚函数

2023-12-09

为什么我们在c++中需要接口(纯虚函数或抽象类)? 我们可以不使用抽象类,而使用一个基类并在其中定义虚函数,并在派生类中重写该虚函数吗? 上述方法有什么优点和缺点(除了我们可以创建基类的对象)?


纯虚函数适用于没有合理的方法在基类中实现该函数的情况。例如:

class Shape {
public:
    virtual float area() const = 0;
};

您可以编写派生类,例如Circle and Rectangle实施area()使用这些形状的特定公式。但你会如何实施area() in Shape本身,如果它不是纯虚拟的呢?在不知道形状是什么样的情况下,如何计算它的面积?

如果你的函数can在基类中(以有用的方式)实现,然后继续实现它。并非所有基类都需要是抽象的。但其中一些只是天生的are抽象的,比如Shape.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们在c++中需要接口或纯虚函数 的相关文章

随机推荐

  • 确定 Flex 应用程序中的链接依赖性

    我有一个大型 Flex 项目 其中有两个应用程序 这些应用程序之间共享大量代码 然而 较小的应用程序不需要较大的应用程序所需的太多代码 我试图确保较小的应用程序不需要的代码不会被编译到其中 有没有一种简单的方法可以让我确定项目中的哪些文件正
  • Scala 中的 F 界多态性

    我正在使用 Scala 2 10 RC5 这是我的代码 object Fbound abstract class E A lt E A self A gt def move a A Int class A extends E A overr
  • 如何使用 iTextsharp 突出显示 pdf 文件中的文本或单词?

    我需要在现有 pdf 文件中搜索一个单词 并且我想突出显示该文本或单词 并保存pdf文件 我有一个想法 使用 PdfAnnotation CreateMarkup 我们可以找到文本的位置 并且可以向其中添加 bgcolor 但我不知道如何实
  • 获取当前 YouTube 视频时间

    我正在编写一个浏览器插件 需要找到一种方法来使用 JavaScript 获取 YouTube 视频在 YouTube 上播放的当前时间 我一直在 Chrome JavaScript 控制台中尝试 但没有任何运气 chrome API 似乎仅
  • 将字符串转换为整数 val

    如果我的字符串包含 100 位或 900 位数字 我如何将其解析为整数值 Java public static void main String args long answer1 1 answer2 1 Scanner sc new Sc
  • “绘制图像没有意义” - 升级到 MountainLion 后警告

    将编程机升级到 MountainLion 并将 XCode 升级到新版本后 每次运行应用程序时 我都会在控制台中打印此警告 当 NSGraphicsContext currentContext 为零 这是一个编程错误 无效时中断 NSWar
  • 使用jquery防止汉字输入

    如何防止使用jquery输入汉字 validator addMethod regex function value element regexp var check false return this optional element re
  • 使用 postgres.app 在 rvm 下需要 pg 时出错

    我在用着Postgres app在 OS X 10 8 3 上 我已经修改了我的PATH所以这样bin该应用程序的文件夹位于所有其他文件夹之前 Rammy phrogz which pg config Applications Postgr
  • 将换行符替换为文字 \n

    这个计算器问题有一个用 sed 替换换行符的答案 使用格式 sed a N ba s n g 这有效 但不适用于 r n 等特殊字符 我想做的是将换行符替换为文字 n 尝试过 sed a N ba s n n g and sed a N b
  • 错误:java: javacTask: 源版本 8 需要目标版本 1.8

    使用IntelliJ IDE无法编译任何项目 设置截图如下 使用的JDK 项目SDK和语言级别 语言水平 有人有什么想法吗 Go to 文件 gt 设置 gt 构建 执行 部署 gt 编译器 gt Java 编译器如果在 Mac 上 则位于
  • 如何从 DOM 中删除某个类的所有元素?

    var paras document getElementsByClassName hi for var i 0 i lt paras length i paras i style color ff0011 hi remove p clas
  • 尝试访问 CIFilter 的 outputImage 时出现“无法识别的选择器”

    我第一次尝试 Core Image 在 OS X 10 7 3 上 但遇到了困难 我确信我正在做的事情很愚蠢 只需要更熟悉该框架的人向我指出 考虑以下代码 让我们规定imageURL是指向磁盘上 JPG 的有效文件 URL CIImage
  • 如何在 Swift 中获取小数位数并加一?

    我需要在最后一个小数位实现加函数 例如 print plusOne 0 0001 gt 0 0002 print plusOne 0 000001 gt 0 000002 print plusOne 22 gt 23 有人做过这件事吗 您可
  • Struts2 jQuery struts-plugin.xml 无效

    我已经设置了一个由 Struts2 Springs JPA 组合而成的项目 我最近遇到了Struts2 Jquery 插件 在我的项目中使用这个插件 struts2 jquery plugin 3 5 1 jar 时出现错误 Unable
  • 如何获取连接到 Android 设备的 USB 配件列表?

    我有一个基于棒棒糖的安卓盒子 该盒子有一个 USB 端口 类似于 Android 手机中的微型 USB 端口 我想检查是否有任何主机连接到 USB 端口 并且 Android 盒子处于设备模式 类似于手机连接到 PC 时的情况 至少 我只需
  • 哪些类型的控件不会显示在 Spy++/Inspect 中?

    我们正在开发一个 Windows 桌面应用程序 该应用程序可以从其他应用程序上的其他控件中提取值 我们的产品非常适合大多数桌面应用程序 我注意到某些控件没有显示在检查和 Spy 中 例如 在 GP 2015 客户端中 只有少数控件可在 Sp
  • 计算平均字长和平均句子长度的 Java 代码

    好吧 我是一个相对较新的程序员 在这项任务上我遇到了很大的困难 作业是创建一个 2 类 java 代码 该代码将读取一个文件 具体是一本书 并对其进行分析以计算平均句子长度和平均单词长度 正确的输出应该是这样的 gt java WordMa
  • python相同unicode的不同长度

    我发现关于 unicode 的一些事情很奇怪 根据我的理解 如果我 u string 类型将是 unicode 但为什么它们的长度不同 print len u New York u200b 14 print type u New York
  • hdfs 权限被拒绝

    我是hadoop分布式文件系统的新手 我已经在我的机器上完成了hadoop单节点的完整安装 但是之后当我将数据上传到hdfs时 它给出了错误消息Permission Denied 来自终端的消息 包含命令 hduser ubuntu usr
  • 为什么我们在c++中需要接口或纯虚函数

    为什么我们在c 中需要接口 纯虚函数或抽象类 我们可以不使用抽象类 而使用一个基类并在其中定义虚函数 并在派生类中重写该虚函数吗 上述方法有什么优点和缺点 除了我们可以创建基类的对象 纯虚函数适用于没有合理的方法在基类中实现该函数的情况 例