gpt4 book ai didi

c++ - 多层继承C++

转载 作者:太空狗 更新时间:2023-10-29 21:48:58 26 4
gpt4 key购买 nike

我有一个基础资源,其中包含加载和卸载等纯虚函数。然后我有一个继承自此类的类并且是 AudioResource 并且具有虚函数,也就是播放和停止。然后我继承了这个类,并拥有一个名为 BassAResource 的类。

假设我已经返回了一个 Resource* 类型,然后我想将它类型转换为 AudioResource 并调用加载函数,并让它实际处理的类处理它,但我一直遇到问题说它是一个纯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”,因为它有未定义的方法。我假设您要返回一个已转换为资源指针的“BASSAResource”。让我伪代码看看我是否明白你的意思

Resource *myFunc() {
BASSAResource *resource = new BASSAResource();
return (Resource*)resource;
}

void myMain() {
Resource *resource = myFunc();
AudioResource *audio = (AudioResource*) resource;
audio->load();
}

这应该可以正常工作——事实上,为什么要转换为 AudioResource,因为 load 被定义为 Resource 类中的抽象方法。但是,如果您想“玩”,则需要此类型转换。同样,您不能使用“new AudioResource()”进行构造,因为您有一个必须首先实现的抽象方法。

此外,要非常小心地使所有析构函数成为虚拟的。您的 ~BASSAResource 不是虚拟的,这会给您带来问题。

关于c++ - 多层继承C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9552385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com