virtual-functions相关内容
可能重复: 成员函数模板可以是虚拟的吗? 在基类中,功能my_func被定义为虚函数.但是,在派生类中,我希望使用my_func作为模板方法.这可能吗? 似乎不是.我收到错误“无法分配抽象类型的对象" ,我认为这与以下事实有关:编译器未确认基类中对虚拟my_func的覆盖.这是否表明设计不佳? 非常感谢. 更新: 感谢您的回答.有人建议我应该发布一些代码,就在这里. 在基
..
我正在浏览一个简单的C ++ Windows程序(我没有源代码,只有二进制文件)的VFT(VMT),这些程序是由Visual Studio编译并进行了某种优化的. 我注意到这是使用继承和多态性.我找到了该程序具有的每个类的struct s_RTTIBaseClassArray的位置.在该位置,有一个指向struct _s_RTTIBaseClassDescriptor的指针数组.基类描述符数
..
我有一个带有虚拟方法的抽象基类.在派生类中,实现了此方法.但是,我希望派生类中的函数为静态方法,以便能够在不实例化该类的对象的情况下调用该函数. class Base { virtual double Foo(double rParam) const; }; class Derived1 : public Base { static double Foo(double rPa
..
我们知道,派生类成员函数可以通过C ++中的基类指针进行访问,提供这些成员函数必须是虚拟的.有没有办法从基类指针访问派生的类成员函数不是虚拟的还是纯虚拟的. 即我想调用仅在派生类&中存在的派生类成员函数.通过基类指针不在基类中.我将如何实现呢? 例如,如果我设计了工厂设计模式, class Vehicle { public: virtual void printVehic
..
我一直试图在类对象中正确钩住/绕行虚拟函数,并且在调用另一个函数方面已经取得了成功,但是对于this关键字传递给该函数. 我读了一篇有关以类似方式钩住D3D函数的文章,并且提到编译器会将诸如int Class::method(int)之类的函数转换为int method(Class* this, int),但是如果我将vtable中的地址替换为如此定义,"this"的地址不正确,因此可能不正
..
由于虚函数调用需要对v表进行额外的索引引用,因此虚函数调用的速度可能会很慢,这可能导致数据高速缓存未命中以及指令高速缓存未命中……不适用于对性能至关重要的应用程序. /p> 因此,我一直在思考一种克服虚拟功能性能问题的方法,但仍具有虚拟功能所提供的某些相同功能. 我相信以前已经做过,但是我设计了一个简单的测试,该测试允许基类存储可由任何派生类设置的成员函数指针.当我在任何派生类上调用Foo
..
给我的印象是,无论何时执行以下操作之一: 添加新的公共虚拟方法 virtual void aMethod(); 添加新的公共非虚拟方法 void aMethod(); 从接口实现公共纯虚拟方法虚拟void aMethod覆盖; 实际上破坏了二进制兼容性,这意味着如果一个项目基于DLL的先前版本构建,则由于有新方法可用,因此将无法加载该项目。 根据我使用Visual Studi
..
可能重复: 具有虚拟函数和可访问的非虚拟析构函数的类 我是从thenewboston的教程中获得的代码: #include 使用命名空间std; 类敌人{ public: virtual void Attack(){}; }; 类忍者:公开敌人{ 公共: void Attack(){ cout
..
几年前,我正在学习x86汇编程序,CPU流水线,缓存未命中,分支预测以及所有这些爵士乐。 这是一个两半的故事。我了解了冗长的流水线在处理器中的所有奇妙优点,即指令重排序,高速缓存预加载,依赖项交织等。 缺点是标准的任何偏差成本很高。例如,每当您通过指针(!)调用函数时,IIRC在千兆赫兹时代的某个AMD处理器都会受到 40个周期 的惩罚。 。 这不是一个微不足道的“不用担心”数字
..
禁止在C ++中调用虚拟方法,但是在某些情况下,它可能非常有用。 请考虑以下情况-一对Parent和Child类。父构造函数需要实例化Child类,因为它必须以特殊方式对其进行初始化。 但是有一个问题-因为在DerivedParent :: ctor的Parent :: ctor调用中,基类应该有一个实例的DerivedChild而不是Child。但这需要以某种方式调用虚拟方法,这是禁
..
考虑到 T T 成员函数的虚拟调用(直接或间接) >,最多只能归结为 T 的实现,下面的代码是否带有不合格的调用,是否具有未定义的行为? 注意,为避免噪音:如果您认为从构造函数中调用时实际上并未调用成员函数,那么请不要在此处回答或评论,而应在一个单独的SO问题。谢谢。 struct Baze { virtual void foo(); virtual void bar()=
..
如何确定基类( B )的指针是否(多态)覆盖基类的某个虚函数? B类{ public:int aField = 0; virtual void f(){}; }; C类:公共B { public:虚拟void f(){aField = 5;}; }; D类:公共B {}; int main(){ B b; C c; D d; std :: vect
..
以下代码中的 X :: f()这样的虚拟函数可以吗 struct X { constexpr virtual int f()const { 返回0; } }; 是 constexpr ? 解决方案 从C ++ 20开始,此答案不再正确。 没有从[dcl.constexpr] / 3(7.1.5,“ constexpr 说明符”)开始:
..
我正在努力尝试使用枚举和大量的宏魔术来为vtables实施替代方案,而这实际上已经开始让我的大脑感到困惑。我开始认为我没有走正确的道路,因为代码变得越来越丑陋,并且无论如何都不适合生产。 如何可以用最少的重定向/操作量来实现以下代码的模式吗? 必须在标准c ++中完成,最多17个。 A类{ virtual void Update()= 0; // A非常纯*¬* };
..
如果您有这样的结构 结构A { void func(); }; 以及类似的引用 A&一种; 您可以找到指向其 func 的指针像这样的方法: someMethod(& A :: func); 现在,如果该方法是虚拟的并且您不知道它在运行时是什么呢?为什么不能得到这样的指针? someMethod(& a.
..
为虚拟函数定义是否必不可少? 请考虑以下示例程序: #include 使用命名空间std; 班级基础 { public: void virtual virtualfunc(); }; 派生的类:公共基础 { public: void virtualfunc() { cout
..
我正在阅读 有效的C ++ , “项目9:在构造或销毁过程中切勿调用虚拟函数”。而且我想知道我的代码是否违反了此规则也可以正常使用: 使用命名空间std; A类{ public: A(bool doLog){ if(doLog) log(); } virtual void log(){ cout
..
我在C ++应用程序中嵌入了python. C ++调用python并将其作为参数传递给C ++对象.该对象具有一些虚函数,并且可以是某些派生类的基类.我如何使boost :: python理解它是一个虚函数? 请考虑以下内容: 在C ++中: class Base { public: virtual void func(); } class Derived { public:
..
我对虚拟对象的大小有些疑问. 1)虚拟功能 class A { public: int a; virtual void v(); } A类的大小为8个字节....一个整数(4个字节)加一个虚拟指针(4个字节) 很明显! class B: public A{ public: int b; virtu
..
C ++支持通过虚拟机制进行动态绑定.但是据我了解,虚拟机制是编译器的实现细节,而该标准仅指定了在特定情况下应发生的行为.大多数编译器通过虚拟表和虚拟指针来实现虚拟机制.这与虚拟指针和表的实现细节无关.我的问题是: 除了虚拟指针和虚拟表机制之外,是否有任何编译器以其他方式实现虚拟函数的动态分配?据我所知(通过阅读G ++,Microsoft Visual Studio),大多数人都是通过虚拟
..