在派生类中实现虚方法的问题

时间:2011-09-23 05:29:01

标签: c++ inheritance virtual

嘿我试图使用MVS2010 Compiler多次继承纯虚函数。所以我可以为所有可渲染对象运行绘制。

所以这是图

ASCII中的

|Renderable            | |Entity             |
|virtual bool draw()=0;| | functions in here |

    is - a              is - a


                Shape

所以它似乎不会让我继承纯虚函数?并实现虚函数。这是我的代码。

// Renderable.h
#ifndef H_RENDERABLE_
#define H_RENDERABLE_
class Renderable
{
 public:
    virtual bool Draw() = 0;
};
#endif


 //Shapes.h
 #ifndef H_SHAPES_
 #define H_SHAPES_
 #include "Renderable.h"
 #include "Entity.h"
 class Shapes : public Entity, public Renderable
 {
 public:
     Shapes();
     ~Shapes();

 };


 #endif

 //shapes.cpp
 #include "Shapes.h"


 Shapes::Shapes()
 {
 }


 Shapes::~Shapes()
 {
 }


 virtual void Shapes::Draw()
 {
 }

我尝试了多项内容,但谷歌搜索也无效。

3 个答案:

答案 0 :(得分:1)

首先,您需要在Shapes类中再次声明绘制函数。然后确保它具有与Renderable类中声明的签名相同的签名。

//Shapes.h
 #ifndef H_SHAPES_
 #define H_SHAPES_
 #include "Renderable.h"
 #include "Entity.h"
 class Shapes : public Entity, public Renderable
 {
 public:
     Shapes();
     ~Shapes();

     virtual bool Draw();

 };


 #endif

 //shapes.cpp

bool Shapes::Draw()
{
}

答案 1 :(得分:0)

您的退货类型不匹配。 Renderable::Draw返回boolShapes::Draw返回void。整个函数签名(包括返回类型)必须匹配,否则派生类中的函数只是隐藏基类中的函数。

答案 2 :(得分:0)

你需要在形状中声明Draw:

class Shapes : public Entity, public Renderable
{
  public:
    Shapes();
    ~Shapes();
    virtual void Draw(); 
};

稍后定义它是不够的。