C++ 在派生类中实现虚方法的问题
嘿,我正试图使用MVS2010编译器继承一个纯虚拟函数。因此,我可以为所有可渲染对象运行绘制 这是图表 ASCII码C++ 在派生类中实现虚方法的问题,c++,inheritance,virtual,C++,Inheritance,Virtual,嘿,我正试图使用MVS2010编译器继承一个纯虚拟函数。因此,我可以为所有可渲染对象运行绘制 这是图表 ASCII码 |Renderable | |Entity | |virtual bool draw()=0;| | functions in here | is - a is - a Shape 看来它不会让我继承纯虚函数?并实现了虚拟功能。这是我的密码 // Rendera
|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()
{
}
我尝试了多种方法,但谷歌搜索也不起作用。您的返回类型不匹配。
Renderable::Draw
返回bool
,而您Shapes::Draw
返回void
。整个函数签名(包括返回类型)必须匹配,否则派生类中的函数只会隐藏基类中的函数。您需要声明Draw in Shapes:
class Shapes : public Entity, public Renderable
{
public:
Shapes();
~Shapes();
virtual void Draw();
};
仅在以后定义它是不够的。首先,需要在Shapes类中再次声明draw函数。然后确保它与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()
{
}
实际上,返回类型不需要精确匹配,协变类型的规则是宽松的。@WinterGreen:您能发布一个完整的、可执行的示例来演示什么不起作用吗?我想您的意思是//shapes.cpp bool shapes::Draw(){}而不是//shapes.cpp virtual bool shapes::Draw(){}它现在可以工作了,但为什么我必须声明它,这似乎有点傻它应该有一个从它继承的类的引用。@WinterGreen但是你通过在末尾指定=0将方法Draw声明为纯虚拟,这意味着你强制任何继承类定义该方法。哎呀!方法定义中不应使用虚拟关键字。更正它。感谢这工作,但因为可渲染是虚拟虚空绘制()=0;我只需要在课堂上重新定义它。