嘿我试图使用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()
{
}
我尝试了多项内容,但谷歌搜索也无效。
答案 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
返回bool
,Shapes::Draw
返回void
。整个函数签名(包括返回类型)必须匹配,否则派生类中的函数只是隐藏基类中的函数。
答案 2 :(得分:0)
你需要在形状中声明Draw:
class Shapes : public Entity, public Renderable
{
public:
Shapes();
~Shapes();
virtual void Draw();
};
稍后定义它是不够的。