问题标签 [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.
c++ - “纯虚函数调用”崩溃从何而来?
我有时会注意到程序在我的计算机上崩溃并出现错误:“纯虚函数调用”。
当无法从抽象类创建对象时,这些程序如何编译?
c++ - 从具体类派生抽象类
假设我们有一个具体的class Apple
. (Apple 对象可以被实例化。)现在,有人来了,并class Peach
从 Apple 派生了一个抽象。它是抽象的,因为它引入了一个新的纯虚函数。Peach 的用户现在被迫从中派生并定义这个新功能。这是一种常见的模式吗?这是正确的做法吗?
样本:
现在假设我们有一个具体的class Berry
. class Tomato
有人从贝瑞那里得到了一个摘要。它是抽象的,因为它覆盖了 Berry 的一个虚函数,并使其成为纯虚函数。Tomato 的用户必须重新实现之前在 Berry 中定义的功能。这是一种常见的模式吗?这是正确的做法吗?
样本:
注意:名称是人为的,不反映任何实际代码(希望如此)。写这个问题没有损害任何成果。c++ - 如何在 C++ 中声明接口?
如何设置代表接口的类?这只是一个抽象基类吗?
c++ - 在 C++ 中是否可以定义纯虚函数?
这是交易。我有一个很大的类层次结构,我有一个一直扩展的方法。该方法总是必须在每个新级别查看一个或两个以上变量,这些变量取决于层次结构中的实际类。我想要做的是检查这两个额外的变量,然后调用同一个函数的超类版本。我希望能够定义此函数,因为它的所有直接子级都将使用它,但我想强制该类的任何子级必须重新定义该方法(因为他们将不得不查看他们的新数据成员)
那我该怎么写呢?我通常使用 =0; 在 .h 文件中,但我认为我不能使用它并定义它......
c++ - 用纯虚方法覆盖(常规)虚方法有什么影响?
假设我们有
这真的是压倒一切的吗?我认为这实际上是重载。从设计角度来看,制作这样的东西有什么意义?
我们得到了一个基类 A。然后我们得到了一个派生自具体类 A 的抽象派生类 B,然后是通过 C 实现的 B。
我们在这里做什么,这有意义吗?
c++ - C++中的纯虚析构函数
写错了吗:
对于抽象基类?
至少在 MSVC 中编译...它会在运行时崩溃吗?
c++ - 纯虚拟类上的 DECLSPEC_NOVTABLE?
这可能是习惯性的编程冗余。我注意到在标题中定义的一堆接口上的 DECLSPEC_NOVTABLE ( __declspec(novtable) ):
关于这个 __declspec 扩展属性的MSDN 文章说,添加这个人将删除构造和析构函数 vtable 条目,从而导致“显着减少代码大小”(因为 vtable 将被完全删除)。
这对我来说没有多大意义。这些家伙是纯虚拟的,为什么编译器不默认这样做呢?
这篇文章还说,如果你这样做,然后尝试实例化这些东西之一,你将遇到运行时访问冲突。但是当我用一些编译器(有或没有 __declspec 扩展名)尝试这个时,它们不会编译(正如我所预料的那样)。
所以我想总结一下:
- 对于纯虚拟接口,编译器是否会删除 vtable,或者我在这里错过了一些基本的东西?
- MSDN 文章在说什么?
c++ - 纯虚函数调用
我显然不'grok' C++。
在这个编程任务中,我遇到了死胡同。这行代码出现运行时错误:
带有消息“运行时错误 - 纯虚函数调用”。
据我了解,如果函数引用在当前未实例化子类时尝试调用(虚拟)基类,则会发生此错误。但是,我看不出我在哪里犯了这个错误。
相关代码:
教授代码:
我的代码:
我读过旧新事物:什么是__purecall?和Visual C++ 中 R6025 运行时错误的描述,但我不完全理解为什么会在上述代码中发生这种情况。
[编辑] main.c 的完整列表(是的,所有一个文件......作业要求的一部分。)
c++ - 是否可以创建指针向量?
只是想知道,由于我遇到的一个问题,是否可以创建一个指针向量?如果是这样,怎么办?特别是关于使用迭代器和 .begin() ,即:我如何将此向量转换为指针向量:
c++ - __cxa_pure_virtual 的目的是什么?
在使用 avr-gcc 进行编译时,我遇到了如下链接器错误:
我发现这个文件说:
该
__cxa_pure_virtual
函数是在调用纯虚函数时调用的错误处理程序。如果您正在编写具有纯虚函数的 C++ 应用程序,则必须提供自己的
__cxa_pure_virtual
错误处理函数。例如:
extern "C" void __cxa_pure_virtual() { while (1); }
按照建议定义此函数可修复错误,但我想知道:
- 这个函数的目的是什么,
- 为什么我需要自己定义它和
- 为什么将其编码为无限循环是可以接受的?