我有一个包含纯虚拟功能(如加载和卸载)的基本资源。然后,我从该类继承一个类,成为AudioResource,又具有虚拟功能,例如播放和停止。然后,我从该类继承而来,并拥有一个名为BassAResource的类。
假设我返回了一个Resource *类型的类型,然后我想将其类型转换为AudioResource并调用load函数,然后让它实际上是该类处理该类,但是我一直在说它是一个纯虚函数AudioResource = s
class Resource
{
public:
Resource();
Resource(std::string filename,unsigned int scope, RESOURCE_TYPE type);
virtual ~Resource();
virtual void load() = 0;
virtual void unload() = 0;
class AudioResource : public Resource
{
public:
AudioResource(std::string filename, unsigned int scope, RESOURCE_TYPE type, AUDIO_T Atype);
virtual void load() = 0;
virtual void unload() = 0;
virtual void play() = 0;
virtual void pause() = 0;
virtual void stop() = 0;
class BASSAResource : public AudioResource
{
public:
~BASSAResource();
virtual void load();
virtual void unload();
virtual void play();
virtual void pause();
virtual void stop();
最佳答案
您无法构造“AudioResource”,因为它具有未定义的方法。我假设您返回的是已强制转换为Resource指针的“BASSAResource”。让我用伪代码看看我是否明白你的意思
Resource *myFunc() {
BASSAResource *resource = new BASSAResource();
return (Resource*)resource;
}
void myMain() {
Resource *resource = myFunc();
AudioResource *audio = (AudioResource*) resource;
audio->load();
}
这应该可以正常工作-实际上,由于负载在Resource类中定义为抽象方法,因此为什么要强制转换为AudioResource。但是,如果您想“玩”,则需要此 Actor 表。同样,由于您具有必须首先实现的抽象方法,因此无法使用“new AudioResource()”进行构造。
同样,要非常小心,以使所有析构函数都是虚拟的。您的〜BASSAResource不是虚拟的,这将为您带来问题。