问题标签 [pure-virtual]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
108546 浏览

c++ - “纯虚函数调用”崩溃从何而来?

我有时会注意到程序在我的计算机上崩溃并出现错误:“纯虚函数调用”。

当无法从抽象类创建对象时,这些程序如何编译?

0 投票
7 回答
4714 浏览

c++ - 从具体类派生抽象类

假设我们有一个具体的class Apple. (Apple 对象可以被实例化。)现在,有人来了,并class Peach从 Apple 派生了一个抽象。它是抽象的,因为它引入了一个新的纯虚函数。Peach 的用户现在被迫从中派生并定义这个新功能。这是一种常见的模式吗?这是正确的做法吗?

样本:

现在假设我们有一个具体的class Berry. class Tomato有人从贝瑞那里得到了一个摘要。它是抽象的,因为它覆盖了 Berry 的一个虚函数,并使其成为纯虚函数。Tomato 的用户必须重新实现之前在 Berry 中定义的功能。这是一种常见的模式吗?这是正确的做法吗?

样本:

注意:名称是人为的,不反映任何实际代码(希望如此)。写这个问题没有损害任何成果。

0 投票
17 回答
543302 浏览

c++ - 如何在 C++ 中声明接口?

如何设置代表接口的类?这只是一个抽象基类吗?

0 投票
2 回答
493 浏览

c++ - 在 C++ 中是否可以定义纯虚函数?

这是交易。我有一个很大的类层次结构,我有一个一直扩展的方法。该方法总是必须在每个新级别查看一个或两个以上变量,这些变量取决于层次结构中的实际类。我想要做的是检查这两个额外的变量,然后调用同一个函数的超类版本。我希望能够定义此函数,因为它的所有直接子级都将使用它,但我想强制该类的任何子级必须重新定义该方法(因为他们将不得不查看他们的新数据成员)

那我该怎么写呢?我通常使用 =0; 在 .h 文件中,但我认为我不能使用它并定义它......

0 投票
4 回答
505 浏览

c++ - 用纯虚方法覆盖(常规)虚方法有什么影响?

假设我们有

这真的是压倒一切的吗?我认为这实际上是重载。从设计角度来看,制作这样的东西有什么意义?

我们得到了一个基类 A。然后我们得到了一个派生自具体类 A 的抽象派生类 B,然后是通过 C 实现的 B。

我们在这里做什么,这有意义吗?

0 投票
2 回答
82098 浏览

c++ - C++中的纯虚析构函数

写错了吗:

对于抽象基类?

至少在 MSVC 中编译...它会在运行时崩溃吗?

0 投票
2 回答
1422 浏览

c++ - 纯虚拟类上的 DECLSPEC_NOVTABLE?

这可能是习惯性的编程冗余。我注意到在标题中定义的一堆接口上的 DECLSPEC_NOVTABLE ( __declspec(novtable) ):

关于这个 __declspec 扩展属性的MSDN 文章说,添加这个人将删除构造和析构函数 vtable 条目,从而导致“显着减少代码大小”(因为 vtable 将被完全删除)。

这对我来说没有多大意义。这些家伙是纯虚拟的,为什么编译器不默认这样做呢?

这篇文章还说,如果你这样做,然后尝试实例化这些东西之一,你将遇到运行时访问冲突。但是当我用一些编译器(有或没有 __declspec 扩展名)尝试这个时,它们不会编译(正如我所预料的那样)。

所以我想总结一下:

  • 对于纯虚拟接口,编译器是否会删除 vtable,或者我在这里错过了一些基本的东西?
  • MSDN 文章在说什么?
0 投票
6 回答
2848 浏览

c++ - 纯虚函数调用

我显然不'grok' C++。

在这个编程任务中,我遇到了死胡同。这行代码出现运行时错误:

带有消息“运行时错误 - 纯虚函数调用”。

据我了解,如果函数引用在当前未实例化子类时尝试调用(虚拟)基类,则会发生此错误。但是,我看不出我在哪里犯了这个错误。

相关代码:
教授代码:

我的代码:

我读过旧新事物:什么是__purecall?Visual C++ 中 R6025 运行时错误的描述,但我不完全理解为什么会在上述代码中发生这种情况。

[编辑] main.c 的完整列表(是的,所有一个文件......作业要求的一部分。)

0 投票
6 回答
29986 浏览

c++ - 是否可以创建指针向量?

只是想知道,由于我遇到的一个问题,是否可以创建一个指针向量?如果是这样,怎么办?特别是关于使用迭代器和 .begin() ,即:我如何将此向量转换为指针向量:

0 投票
2 回答
47872 浏览

c++ - __cxa_pure_virtual 的目的是什么?

在使用 avr-gcc 进行编译时,我遇到了如下链接器错误:

我发现这个文件说:

__cxa_pure_virtual函数是在调用纯虚函数时调用的错误处理程序。

如果您正在编写具有纯虚函数的 C++ 应用程序,则必须提供自己的__cxa_pure_virtual错误处理函数。例如:

extern "C" void __cxa_pure_virtual() { while (1); }

按照建议定义此函数可修复错误,但我想知道:

  • 这个函数的目的是什么,
  • 为什么我需要自己定义它和
  • 为什么将其编码为无限循环是可以接受的?