pure-virtual相关内容

函数定义上的纯说明符

在 GCC 上编译时,我收到 error: pure-specifier on function-definition,但在我使用 VS2005 编译相同的代码时却没有. class Dummy {//错误:函数定义上的纯说明符,VS2005编译虚拟无效进程()= 0 {};}; 但是当这个纯虚函数的定义不是内联时,它是有效的: class Dummy{虚拟无效进程()= 0;};void ..
发布时间:2021-11-25 09:26:53 C/C++开发

没有纯虚函数的C++抽象类?

我有一个基类 class ShapeF{民众:形状F();虚拟 ~ShapeF();内联无效 SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition);}受保护:Vector2 mPosition;} 显然有一些省略的代码,但你明白了.我使用它作为模板,并通过一些有趣的(省略)枚举来确定我正在使用的形状类型 clas ..
发布时间:2021-11-25 09:23:57 C/C++开发

为什么纯虚函数初始化为0?

我们总是将纯虚函数声明为: virtual void fun() = 0 ; 即,它总是被赋值为 0. 我的理解是,这是为了将此函数的 vtable 条目初始化为 NULL,而此处的任何其他值都会导致编译时错误.这种理解正确与否? 解决方案 使用 =0 的原因是 Bjarne Stroustrup 认为他无法获得另一个关键字,例如“pure";在实现该功能时通过了 C++ 社区. ..
发布时间:2021-11-25 09:18:45 C/C++开发

你如何在 C++ 中声明一个接口?

如何设置代表接口的类?这只是一个抽象基类吗? 解决方案 通过 bradtgmurray,您可能希望通过添加一个虚析构函数来为接口的纯虚方法列表做一个例外.这允许您将指针所有权传递给另一方,而无需公开具体的派生类.析构函数不需要做任何事情,因为接口没有任何具体的成员.将函数定义为虚拟函数和内联函数似乎有些矛盾,但相信我 - 事实并非如此. class IDemo{民众:虚拟 ~IDemo( ..
发布时间:2021-11-25 09:17:11 C/C++开发

如何在具有抽象类的多重继承的 C++ 中使用 clone()?

我正在开发 C++ 程序,但在使用克隆时遇到多重继承问题.问题(以简化形式)如下. 我希望能够克隆从类 Base 派生的所有对象. class Base{民众:virtual Base* clone()const=0;}; 我想定义另外两个从 Base 派生的类,它们都是抽象的,即我不能定义 clone 函数,但我必须以某种方式声明它们(我想确保,如果我克隆 Derived*,我将返回 ..
发布时间:2021-11-25 09:05:34 C/C++开发

定义"pure"是否有意义?基类本身中的虚函数?

在基类中定义 common 虚函数的好处是,我们不必在派生类中重新定义它们. 即使我们在基类本身中定义了 pure 虚拟函数,我们仍然也必须在派生类中定义它们. #include使用命名空间std;类种类家庭{上市:虚拟void numberOfLegs()= 0;};无效种类家庭:: numberOfLegs(){cout ..
发布时间:2021-04-19 20:59:23 C/C++开发

创建没有抽象方法的抽象类

我有3个班级,A,B和C: A类{///一些代码};B级:公共A{///一些代码};C级:公共B{///一些代码}; 我想使A类和B类成为抽象类,以防止创建它们的实例,但是这两个类都没有抽象方法.即使没有抽象方法,也有办法使类抽象吗? 解决方案 如果您将这些类用作示例代码中所示的基类,则可能是虚拟析构函数.并且由于析构函数是一种方法,因此可以将其设为纯虚拟(“抽象")析构函数,以使 ..

从T构造函数中调用类T的纯虚函数的实现而没有资格吗?

考虑到 T T 成员函数的虚拟调用(直接或间接) >,最多只能归结为 T 的实现,下面的代码是否带有不合格的调用,是否具有未定义的行为? 注意,为避免噪音:如果您认为从构造函数中调用时实际上并未调用成员函数,那么请不要在此处回答或评论,而应在一个单独的SO问题。谢谢。 struct Baze { virtual void foo(); virtual void bar()= ..
发布时间:2020-10-08 19:45:04 C/C++开发

const限定词从纯虚函数中消失

使用gcc版本4.8.2: 在编译代码时,我遇到了一个问题,即参数上的const限定词消失了。这是一个示例: main.cc: #include class Base { public: virtual int getSum(const int number)= 0; }; 派生类:public Base { public: ..
发布时间:2020-10-08 06:12:15 C/C++开发

如何在具有抽象类的多重继承的C ++中使用clone()?

我正在使用C ++程序,但是使用克隆时遇到多重继承问题.问题(以简化形式)如下. 我希望能够克隆所有从Base类派生的对象. class Base{ public: virtual Base* clone()const=0; }; 我想定义另外两个从Base派生的类,它们都是抽象的,即我无法定义克隆函数,但是我必须以某种方式声明它们(我想确保,如果我克隆Derived * ..
发布时间:2020-08-19 20:48:56 C/C++开发

为什么抽象类具有vtable?

关于此帖子: 对于使用vtable的实现,答案是:是的,通常。您 可能认为抽象类不需要vtable,因为 派生类将具有自己的vtable,但是在 构造过程中需要:在构造基类时,它将 vtable指针设置为其自己的vtable。稍后,当输入派生类 构造函数时,它将使用自己的vtable。 我假设答案是正确的,但我不太明白。为什么vtable确实需要用于构造? 解决方案 ..
发布时间:2020-05-31 22:37:44 C/C++开发

未实现的纯虚拟方法?

这是问题所在:尝试编译时,我不断收到未实现的纯虚方法错误。我已经在抽象基类中实现了所有纯虚方法。有什么想法吗? 这是抽象基类: 类记录{ public: virtual int getID()= 0; 虚拟记录* clone(); }; 并执行: 类sdata:公共记录{ public: sdata(std :: string s =“”){dat ..
发布时间:2020-05-31 22:32:21 C/C++开发