问题标签 [virtual-functions]
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++在子类中调用虚方法
我有以下课程:
当我使用时,inner->doSomething()
我得到一个分段错误。我应该怎么做才能打电话inner->doSomething()
到B班?
提前致谢。
c# - c#继承类初始化
所以我有这门课
和另一个继承它的类
调用对象Line(true, 1, true, Color.Gray, true)
时,它首先覆盖继承的类函数,然后设置steps
为true
.
我想steps
被包含在覆盖中,所以steps
现在将true
代替false
(它的默认值)。
如果可能的话,请给我一些关于如何解决这个问题的指示和提示,并向我解释为什么我的设置不允许在构造函数初始化之后发生覆盖。
c# - 虚拟方法/属性的后果
我最近在开发过程中一直在使用 Moq,我喜欢我能够实现的目标。
但是,我发现自己将我的方法(和大部分属性)虚拟化,以便我可以在测试中用模拟替换它们。
除了“你让你的所有方法和属性都可以覆盖”之外,这个行动过程有哪些现实世界的后果?
c++ - C++ 基类如何在运行时确定方法是否已被覆盖?
下面的示例方法旨在检测它是否已在派生类中被覆盖。我从 MSVC 得到的错误意味着尝试将函数指针指向“绑定”成员是完全错误的,但我认为这应该是一个问题没有任何合乎逻辑的理由(毕竟,它将在this->vtable中)。有没有修复此代码的非 hacky 方法?
c++ - 无法理解 C++ `virtual`
我无法理解virtual
C++ 中关键字的用途。我非常了解 C 和 Java,但我是 C++ 新手
来自维基百科
在面向对象的编程中,虚函数或虚方法是一种函数或方法,其行为可以在继承类中被具有相同签名的函数覆盖。
virtual
但是我可以在不使用关键字的情况下覆盖如下所示的方法
正如您在下面看到的,函数 A::a 被 B::a 成功覆盖,而不需要virtual
让我更加困惑的是这个关于虚拟析构函数的声明,也来自维基百科
如以下示例所示,对于 C++ 基类,具有虚拟析构函数非常重要,以确保始终调用来自最派生类的析构函数。
那么virtual
还告诉编译器调用父级的析构函数吗?这似乎与我最初对virtual
“使函数可覆盖”的理解有很大不同
c# - 从静态方法调用后代虚拟方法
首先让我们确定这一点。
我有
打电话有效吗
???
如果是这样,让我们扩展前面的示例:
我应该如何在基类中构造 StaticMethod,以便可以从派生类中使用 VirtualMethod?看来我今天的咖啡因太少/太多了,我什么都没有想到。
嗯,我知道我不能从静态方法调用实例方法。所以问题来了:
我可以从基类的静态方法创建派生类的实例吗?通过使用类似的东西:
为了说明的目的,我发明了新的关键字,派生。
顺便说一句,我会在这里支持基于非反射的解决方案!
c++ - C++中的虚函数
在我的 C++ 程序中:
该语句应调用B::func()
. 但是,该函数C::func()
被调用。请对此有所了解。一旦在“class A”中删除了 virtual 关键字,就不会再发生这种情况了。
c++ - 纯虚函数
在 C++ 程序中:
如果虚函数 func() 在类 B 的主体中重新定义,则不会出错。但是在使用范围解析运算符时,编译器会抛出错误。这是为什么?
oop - 为什么热插拔 vtables 不是流行的语言功能?
在面向对象的编程中,有时能够修改已创建对象的行为是件好事。当然,这可以通过策略模式等相对冗长的技术来完成。但是,有时通过在实例化后更改 vtable 指针来完全更改对象的类型会很好。如果您从 A 类切换到 B 类,这将是安全的:
- B 类是 A 类的子类,不添加任何新字段,或
- B 类和 A 类具有相同的父类。除了覆盖父类的虚函数之外,什么都不做。(没有新字段或虚函数。)
- 在任何一种情况下,A 和 B 都必须具有相同的不变量。
这在 C++ 和 D 编程语言中是可以破解的,因为指针可以任意转换,但它是如此丑陋且难以理解,以至于我害怕在需要被其他人理解的代码中这样做。为什么通常不提供更高级别的方法来执行此操作?
c++ - 虚拟方法或函数指针
在 C++ 中实现多态行为时,可以使用纯虚方法,也可以使用函数指针(或函子)。例如,可以通过以下方式实现异步回调:
方法一
所以要在这里使用回调,你需要重写 doGo() 方法来调用你想要的任何函数
方法二
要在此处使用回调方法,您需要创建一个回调对象调用的函数指针。
方法 3
[这是我(安德烈亚斯)添加到问题中的;不是原海报写的】
每种实现的优点和缺点是什么?