virtual-functions相关内容

类成员函数模板可以是虚拟的吗?

我听说C ++类成员函数模板不能是虚拟的。这是真的? 如果它们可以是虚拟的,那么使用这种功能的情况的例子是什么? 解决方案 模板都是有关编译器在 compile-time 时生成代码的。虚拟函数都是关于运行时系统的,用于确定在运行时中调用哪个函数。 一旦运行时系统发现需要调用模板化的虚拟函数,编译就完成了,并且编译器无法再生成适当的实例了。因此,您不能具有虚拟成员功能模板。 ..

在C ++ / QT中创建抽象类对象的QList?

尽管这里的其他问题/答案已经无数次地帮助了我,但这是我的第一个问题,所以请不要对我太苛刻! :) 我一直在学习QT / C ++,并假设我有这样的东西: class AbstractMasterClass { public: virtual void foo(void)= 0; //纯虚拟方法 } 该类将有很多子类,每个子类实现自己的foo()方法。 问题是: ..
发布时间:2020-05-31 22:39:21 C/C++开发

强制派生类在非抽象基类中重载虚拟方法

我正在使用简单的克隆模式编写一些代码,如果我能够强制派生类重写该克隆模式,但又保留了使用我的基类的能力,我会很喜欢。 (因此,我不想将clone方法声明为纯虚拟方法。) 是否有在编译器级别强制实施此限制的方法? 解决方案 不幸的是,在C ++中没有办法实现这一目标。您不能强制在子类中重写非抽象方法。但是,我可能会注意到,具体的基类在C ++中应该很少见,您可能需要重新考虑设计。有了有 ..
发布时间:2020-05-31 22:37:19 C/C++开发

如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

我们不能创建抽象类的对象,对吗?那么,如何调用在抽象基类和派生类中都具有定义的虚函数呢?我想在抽象基类中执行代码,但是目前,我正在使用派生类的对象. class T { public: virtual int f1()=0; virtual int f2() { a = 5; return a } } class DT : public T { public: ..
发布时间:2020-05-29 00:54:05 C/C++开发

如何像编译器一样获取每个虚函数索引?

是否有一些插件或工具可以读取.h文件(或简单地修改Intellisense本身)并吐出每个函数及其虚拟函数表索引?我还没有弄清楚与多态性有关的一种模式,当您开始有彼此衍生的5个或更多类时,它会变得困难5倍.但是,无论如何,MSVC ++编译器在编译从C ++到Assembly的虚拟函数调用时,总是会发出正确的虚拟函数表索引.必须有一种更好的方法来获取该索引,而无需加载,断点,读取偏移量和重写代码, ..
发布时间:2020-05-29 00:45:41 C/C++开发

多态类型的连续存储

我想知道是否存在任何可行的方式来连续存储多态对象数组,以便可以合法地调用基于公共基础上的virtual方法(并将分派给子类中正确的重写方法) ). 例如,考虑以下类别: struct B { int common; int getCommon() { return common; } virtual int getVirtual() const = 0; } struct ..
发布时间:2020-05-29 00:41:43 C/C++开发

C ++:为什么struct \ class需要虚拟方法才能实现多态?

以下此问题 ,我想知道为什么C ++中的struct \ class必须具有虚拟方法才能实现多态. 强制使用虚拟析构函数很有意义,但是如果根本没有析构函数,为什么必须强制使用虚拟方法? 解决方案 因为C ++中的多态对象的类型基本上是由指向其vtable的指针确定的,而vtable是虚拟函数的表.但是,仅在至少有一个虚拟方法的情况下才创建vtable.为什么?因为在C ++中,您永远 ..
发布时间:2020-05-29 00:41:37 C/C++开发

C ++基类指针调用子虚函数,为什么基类指针可以看到子类成员

我想我可能会感到困惑.我知道C ++中具有虚函数的类具有一个vtable(每个类类型一个vtable),因此Base类的vtable将具有一个元素&Base::print(),而Child类的vtable将具有一个元素&Child::print() . 当我声明两个类对象base和child时,base的vtable_ptr将指向Base类的vtable,而child的vtable_ptr将 ..
发布时间:2020-05-28 23:22:42 C/C++开发