问题标签 [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 投票
2 回答
3719 浏览

c++ - 引用变量和虚函数

我在使用引用变量时发现了一个奇怪的行为。

这是类实现:

这是一个具有奇怪行为的示例代码:

总之,似乎只有在初始化引用变量时才确定与引用变量“关联”的虚函数指针表。如果我重新分配参考变量,vfpt不会改变。

这里会发生什么?

0 投票
1 回答
360 浏览

c++ - 为什么这个没有声明任何纯虚成员函数的类是抽象的?

下面的类是如何Game抽象的?以及如何使其具体化,以便创建它的实例?

游戏.h

主文件

PS任何解释都会有所帮助,因为我不是面向对象编程的专家。

这是错误消息以及其他一些内容:

0 投票
8 回答
37805 浏览

c++ - 从基类构造函数调用纯虚函数

我有一个包含纯虚函数的基类 MyBase:

void PrintStartMessage() = 0

我希望每个派生类在它们的构造函数中调用它

然后我把它放在基类(MyBase)构造函数中

但我得到一个链接器错误。

我想强制所有派生类...

我必须怎么做?

0 投票
6 回答
5531 浏览

c++ - 来自构造函数和析构函数的纯虚拟调用

C++ 标准规定禁止从构造函数或析构函数调用纯虚函数。这是什么原因?为什么标准要设置这样的限制?

0 投票
2 回答
193939 浏览

c++ - Error: expected type-specifier before 'ClassName'

I'm trying to understand why the above won't compile. For Whatever reason, when I try to create an instance of Rect2f (which DOES inherit from the Shape class specified the shared_ptr template argument, just like Circle), I get the following errors:

Everything about the Circle shared_ptr is perfectly fine. There are no problems with it; it's only the Rect2f which is causing issues.

Furthermore, the values passed into the constructor are valid.

So, what could the issue be with this one? I have Rect.h included for this. For brevity's sake (and incase I missed something in that file which may be affecting this), I'll post the following:

Rect.h

Source of Error Function and File Header (mainwindow.cpp)

Main Function Test (main.cpp)

Question

Judging from the errors provided, what am I missing here? Also, what can be done to rectify this issue?

0 投票
2 回答
2840 浏览

c++ - 有什么方法可以让 Eclipse 自动实现纯虚函数?

我用纯虚方法声明了一些类,并让一些类派生了它。Eclipse CDT有没有办法像java开发一样定位父类的纯虚函数并自动完成子类的声明?不得不来回复制和粘贴这些功能变得很烦人

0 投票
4 回答
283 浏览

c++ - 在不同项目中使用的头文件中声明的纯抽象 C++ 类(没有编译时链接)是否共享相同的虚拟表模型?

我有一个 C++ 标头声明一个仅由纯虚拟方法组成的类。我有两个使用该头文件的 DLL(其中一个实现了该接口),但在编译时没有链接。一个 DLL 动态加载另一个,将已实现接口的指针传递给另一个。这些 DLL 是否共享相同的虚拟表结构?

0 投票
4 回答
10275 浏览

c++ - 为什么从构造函数对纯虚函数的虚调用是 UB,而标准允许对非纯虚函数的调用?

从 10.4抽象类段落开始。标准中的 6 条:

“可以从抽象类的构造函数(或析构函数)调用成员函数;对于从这样的构造函数(或析构函数)创建(或销毁)的对象,直接或间接地对纯虚函数进行虚调用的效果是未定义的。”

假设标准允许从构造函数(或析构函数)调用非纯虚函数,为什么会有区别?

[编辑]更多关于纯虚函数的标准引用:

§ 10.4/2 通过在类定义的函数声明中使用纯说明符 (9.2) 来纯指定虚函数。纯虚函数仅在使用或如同使用 (12.4)、qualified-id 语法 (5.1) 调用时才需要定义。... [注意:函数声明不能​​同时提供纯说明符和定义——尾注]

§ 12.4/9析构函数可以声明为虚拟(10.3)或纯虚拟(10.4);如果在程序中创建了该类或任何派生类的任何对象,则应定义析构函数。

一些需要回答的问题是:

  • 在没有给纯虚函数实现的情况下,这不应该是编译器或链接器错误吗?

  • 已经给纯虚函数一个实现的地方,为什么在这种情况下不能很好地定义调用这个函数呢?

0 投票
6 回答
1601 浏览

c++ - 来自 Base Tor 的纯虚函数调用

考虑以下示例代码:

上面的代码在基类中具有纯虚函数bar(),在派生类中被覆盖。纯虚函数bar()在基类中没有定义。

现在关注Line1,Line2和。Line3Line4

我了解Line1给出编译错误,因为无法从 ctor 调用纯虚函数。

问题:

  1. 为什么Line2和上面声明中提到的相同原因不Line4给出?呼入和最终只会引起。compilation errorI understandLine2Line4linker-error

  2. 为什么Line3既不给出编译错误也不给出链接器错误,而run-time exception只给出?

通过构造函数调用纯虚函数时UB的真实例子:

通过构造函数调用纯虚函数时UB的真实例子

0 投票
3 回答
1575 浏览

c++ - 具有同名抽象和已定义继承函数的多重继承

首先,如果有另一篇帖子回答这个问题,我深表歉意,我发现的所有类似帖子都涉及钻石继承方案或定义的函数,而这不是。

简而言之,我想知道是否可以让一个类从其他两个类继承,其中两个子类都有一个具有相同名称和参数的函数,但它在一个子类中定义,而在另一个子类中定义为纯虚拟。此外,如果我能做到这一点,在纯虚拟/抽象类上调用函数最终会在对派生类的更改最小的情况下调用另一个子类上的定义函数吗?

例子:

到目前为止,我尝试编译这个基本示例时遇到了如下错误:

“AB”:由于以下成员,无法实例化抽象类:“void A::Set(int)”:是抽象的

在进行自己的研究时,我找不到明确的答案,但基于其他涉及相关主题的问题,我发现在 AB 类中使用“使用 B::Set”可能会对此有所帮助。但是当我尝试将它添加到 AB 类定义时,错误仍然存​​在。

有什么办法可以使这项工作?