pure-virtual相关内容
在 GCC 上编译时,我收到 error: pure-specifier on function-definition,但在我使用 VS2005 编译相同的代码时却没有. class Dummy {//错误:函数定义上的纯说明符,VS2005编译虚拟无效进程()= 0 {};}; 但是当这个纯虚函数的定义不是内联时,它是有效的: class Dummy{虚拟无效进程()= 0;};void
..
我有一个基类 class ShapeF{民众:形状F();虚拟 ~ShapeF();内联无效 SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition);}受保护:Vector2 mPosition;} 显然有一些省略的代码,但你明白了.我使用它作为模板,并通过一些有趣的(省略)枚举来确定我正在使用的形状类型 clas
..
我有一个包含纯虚函数的基类 MyBase: void PrintStartMessage() = 0 我希望每个派生类都在它们的构造函数中调用它 然后我把它放在基类(MyBase)构造函数中 类 MyBase{民众:虚拟无效 PrintStartMessage() =0;我的基地(){打印开始消息();}};派生类:公共 MyBase{民众:void PrintStartMe
..
我们总是将纯虚函数声明为: virtual void fun() = 0 ; 即,它总是被赋值为 0. 我的理解是,这是为了将此函数的 vtable 条目初始化为 NULL,而此处的任何其他值都会导致编译时错误.这种理解正确与否? 解决方案 使用 =0 的原因是 Bjarne Stroustrup 认为他无法获得另一个关键字,例如“pure";在实现该功能时通过了 C++ 社区.
..
如何设置代表接口的类?这只是一个抽象基类吗? 解决方案 通过 bradtgmurray,您可能希望通过添加一个虚析构函数来为接口的纯虚方法列表做一个例外.这允许您将指针所有权传递给另一方,而无需公开具体的派生类.析构函数不需要做任何事情,因为接口没有任何具体的成员.将函数定义为虚拟函数和内联函数似乎有些矛盾,但相信我 - 事实并非如此. class IDemo{民众:虚拟 ~IDemo(
..
我正在做一个练习,该练习要求我选取一个 Rodent 基类并使其成为一个纯抽象类.我对纯抽象类的理解是它充当接口并且只包含纯虚函数.虽然这是一个简单的练习,但我对本书提供的解决方案有疑问: 类啮齿类动物{民众:虚拟 ~Rodent() {cout
..
我正在开发 C++ 程序,但在使用克隆时遇到多重继承问题.问题(以简化形式)如下. 我希望能够克隆从类 Base 派生的所有对象. class Base{民众:virtual Base* clone()const=0;}; 我想定义另外两个从 Base 派生的类,它们都是抽象的,即我不能定义 clone 函数,但我必须以某种方式声明它们(我想确保,如果我克隆 Derived*,我将返回
..
在基类中定义 common 虚函数的好处是,我们不必在派生类中重新定义它们. 即使我们在基类本身中定义了 pure 虚拟函数,我们仍然也必须在派生类中定义它们. #include使用命名空间std;类种类家庭{上市:虚拟void numberOfLegs()= 0;};无效种类家庭:: numberOfLegs(){cout
..
我有3个班级,A,B和C: A类{///一些代码};B级:公共A{///一些代码};C级:公共B{///一些代码}; 我想使A类和B类成为抽象类,以防止创建它们的实例,但是这两个类都没有抽象方法.即使没有抽象方法,也有办法使类抽象吗? 解决方案 如果您将这些类用作示例代码中所示的基类,则可能是虚拟析构函数.并且由于析构函数是一种方法,因此可以将其设为纯虚拟(“抽象")析构函数,以使
..
请考虑以下标准CRTP示例: #includetemplatestruct Base {void f(){static_cast(this)-> f();}void g(){static_cast(this)-> g();}};struct Foo:public Base{void f(){std :: co
..
我正在尝试从DLL导出类。我阅读了此文章: http:/ /www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL “成熟”方法建议, //标头 类IFoo { public : virtual int getBar()= 0; } Foo类:public IFoo {...} D
..
考虑到 T T 成员函数的虚拟调用(直接或间接) >,最多只能归结为 T 的实现,下面的代码是否带有不合格的调用,是否具有未定义的行为? 注意,为避免噪音:如果您认为从构造函数中调用时实际上并未调用成员函数,那么请不要在此处回答或评论,而应在一个单独的SO问题。谢谢。 struct Baze { virtual void foo(); virtual void bar()=
..
使用gcc版本4.8.2: 在编译代码时,我遇到了一个问题,即参数上的const限定词消失了。这是一个示例: main.cc: #include class Base { public: virtual int getSum(const int number)= 0; }; 派生类:public Base { public:
..
考虑一下,我有两个纯虚拟类,一个是从另一个类派生的,一个具体类是从上一个提到的派生而来的: #include #include class Abstract1 { public: virtual〜Abstract1(){}; virtual void method(int a)= 0; 受保护: Abstract1()
..
例如: class Base { virtual void my_function()= 0; }; 派生类:基础{ void my_function()覆盖; }; 根据我的阅读, override 关键字用来确保我们在要覆盖的函数中具有正确的签名,这似乎是它的唯一用法。 但是,对于a纯虚函数,如果我们在Derived类(或Base类,取决于人们
..
shared_ptr circle(new Circle(Vec2f(0,0),0.1,Vec3f(1,0,0)))); shared_ptr rect(新Rect2f(Vec2f(0,0),5.0f,5.0f,0, Vec3f(1.0f,1.0f,0))); 我想了解为什么以上内容无法编译。无论出于何种原因,当我尝试创建Rect2f实
..
shared_ptr circle(new Circle(Vec2f(0,0),0.1,Vec3f(1,0,0)))); shared_ptr rect(新Rect2f(Vec2f(0,0),5.0f,5.0f,0, Vec3f(1.0f,1.0f,0))); 我想了解为什么以上内容无法编译。无论出于何种原因,当我尝试创建Rect2f实
..
我正在使用C ++程序,但是使用克隆时遇到多重继承问题.问题(以简化形式)如下. 我希望能够克隆所有从Base类派生的对象. class Base{ public: virtual Base* clone()const=0; }; 我想定义另外两个从Base派生的类,它们都是抽象的,即我无法定义克隆函数,但是我必须以某种方式声明它们(我想确保,如果我克隆Derived *
..
关于此帖子: 对于使用vtable的实现,答案是:是的,通常。您 可能认为抽象类不需要vtable,因为 派生类将具有自己的vtable,但是在 构造过程中需要:在构造基类时,它将 vtable指针设置为其自己的vtable。稍后,当输入派生类 构造函数时,它将使用自己的vtable。 我假设答案是正确的,但我不太明白。为什么vtable确实需要用于构造? 解决方案
..
这是问题所在:尝试编译时,我不断收到未实现的纯虚方法错误。我已经在抽象基类中实现了所有纯虚方法。有什么想法吗? 这是抽象基类: 类记录{ public: virtual int getID()= 0; 虚拟记录* clone(); }; 并执行: 类sdata:公共记录{ public: sdata(std :: string s =“”){dat
..