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

c++ - 虚拟/纯虚拟解释

如果一个函数被定义为虚拟并且与纯虚拟相同,这到底意味着什么?

0 投票
3 回答
1194 浏览

c# - Virtual 和 Override 在幕后做了什么

我刚开始了解 Virtual 和 Override 是用于(我找不到这么久的用途)。现在我在工厂模式中使用它们。所以我的问题是 Virtual 和 Override 在幕后做了什么?我愿意进入 IL 和机器代码的东西。

0 投票
3 回答
6745 浏览

c# - 如何使用方法实现基类并强制派生类覆盖它?

有这样的东西:

我读了另一篇文章(虚拟类中的抽象方法),女巫很像我的问题,但有一点不同。我希望 AAA.ToString() 具有基本行为强制派生类覆盖它。

我知道我可以做这样的事情(向下滚动),但我正在寻找合适的方法。

我也可以制作一个 IAAA 界面并构建我的 BBB 类,例如

但在我看来不对。

0 投票
10 回答
339 浏览

c++ - 这有多虚拟?

你能解释一下为什么:

打印“ Child::Method() ”,并且:

打印“ Parent::Method() ”?

课程:

谢谢,埃塔姆。

0 投票
4 回答
12675 浏览

c++ - 虚拟数据类型/枚举

我想要一个像这样的虚拟课程:

这样每个派生的配置都可以有自己的一组 EPromptIds

这会失败,因为每个类都需要使用 Configuration::EPromptId 参数(而不是本代码中的 Configuration1::EPromptId 或 Configuration2::EPromptId)来实现虚函数。

是否可以让基类识别参数类型,但在每个派生类中定义不同的值(可能不使用枚举,但保持强类型,即不使用 int)。

编辑:我想要两个不同的“应用程序”有两种不同的配置。提示可以保存在数据库表中,但每个“应用程序”都有自己的表。指向基本配置类的指针包含在与某些硬件接口的类中(即实际显示的类)。硬件是一个 io 设备,可用于请求和接收用户输入。创建硬件类时,它将传递一个指向正确配置类的指针,因此在请求时显示正确的提示。

0 投票
4 回答
2692 浏览

c++ - C++ 继承/VTable 问题

更新:将析构函数示例替换为直接方法调用示例。

你好,

如果我有以下代码:

  1. B中有VTable吗?B 没有虚函数,但从 b::func0() 调用 a::func0()
  2. func1 是否驻留在 VTable 中?它不是虚拟的。
  3. func2 是否驻留在 VTable 中?
  4. 如果 b::func0() 中没有 aa::func0() 调用,上述答案是否会有所不同?

谢谢

0 投票
4 回答
8186 浏览

java - 我们可以在硬件中实现一个本地执行 Java 字节码的 Java 解释器吗?

如果我们在硬件中实现 java 解释器,那么我们如何实现 java 字节码的体系结构中立性...... java 是否使用 JIT(即时解释器)?以及这一切与操作系统的虚拟机概念和java虚拟机(JVM)有何关系

0 投票
2 回答
2410 浏览

windows - 如何将来自两个游戏控制器的输入混合匹配到一个“虚拟”控制器中?

想象以下情况:

  1. 您使用的是 Windows XP(即使下面显示的对话框是 Vista 屏幕截图)。
  2. 您有两个物理 USB 游戏控制器,我们称它们为 A 和 B。
  3. 您有一个软件显然以传统方式访问操纵杆,只识别并允许使用一个操纵杆。
  4. 使用此软件时,您希望同时使用两个控制器,例如:
    • 使用 A 的左摇杆和 B 的右摇杆
    • 使用 A 中的 #1、#2 和 #6 按钮以及 B 中的 #2 和 #8 按钮

我想这个问题一定已经在某处的硬核游戏中出现了,并且有一种“虚拟游戏控制器驱动程序”或其他软件可用。理想情况下,这将在 Windows 中显示为游戏控制器,并允许使用物理连接控制器上可用的任何输入进行上述虚拟设置,以创建复合虚拟控制器。

Windows 旧版操纵杆对话框

如果是这种情况,我很想知道在哪里可以得到这个。如果没有,欢迎任何有关尝试实现这一目标的指示。我想我必须阅读 DirectInput 并清除我几乎不存在的 C++ 技能?

就像 Runeborg 回答的那样,现在看来,如果我想让这种情况发生,我可能不得不尝试编写自己的“虚拟游戏控制器设备驱动程序”。:-(

快速更新:在 smartgamer 上问过同样的问题,希望那里的另一群人可能会想出一个现有的答案。

0 投票
3 回答
742 浏览

c++ - Acceptable to use virtual inheritance to prevent accidentally creating a diamond?

This is a simplification of some real code, and a real mistake I made when I didn't realize someone else had already implemented Foo and derived from it.

EDIT: to save you from having to run this code...

  • If run as-is, it prints "fail" (undesireable, hard to debug).
  • If you delete the line marked "oops" it prints "Foo" (desired behavior).
  • If you leave the "oops" and make the two inheritances virtual, it won't compile (but at least you know what to fix).
  • If you delete the "oops" and make them virtual, it will compile and will print "Foo" (desired behavior).

With virtual inheritance, the outcomes are either good or compiler-error. Without virtual inheritance, the outcomes are either good or unexplained, hard-to-debug runtime failure.


When I implemented Bar, which basically duplicated what Foo was already doing, it caused the dynamic cast to fail, which meant bad things in the real code.

At first I was surprised there was no compiler error. Then I realized there was no virtual inheritance, which would have triggered the 'no unique final overrider' error in GCC. I purposefully chose not to use virtual inheritance since there aren't supposed to be any diamonds in this design.

But had I used virtual inheritance when deriving from Base, the code would have worked just as well (without my oops), and I would have been warned about the diamond at compile time vs. having to track down the bug at run time.

So the question is -- do you think it's acceptable to use virtual inheritance to prevent making a similar mistake in the future? There's no good technical reason (that I can see) for using virtual inheritance here, since there should never be a diamond in the design. It would only be there to enforce that design constraint.

0 投票
4 回答
3605 浏览

c++ - 在 C++ 中,如果一个函数覆盖了一个虚函数,它会自动为虚函数吗?

我希望如果foo在 class 中声明D,但未标记为 virtual,则以下代码将调用fooin的实现D(无论 的动态类型如何d)。

但是,在下面的程序中,情况并非如此。谁能解释一下?如果方法覆盖了虚函数,它会自动为虚函数吗?

上述程序的输出是: