gpt4 book ai didi

C++属性实现功能

转载 作者:行者123 更新时间:2023-11-28 06:07:36 25 4
gpt4 key购买 nike

假设一个普通播放器会通知某些事件给某些类的对象。我创建了一个基类,其中包含一些保证在派生中存在的虚函数:

class PlayEventsReceiver{

virtual void StartPlay()=0;
virtual void StopPlay()=0;
};

我将从 PlayEventsReceiver 派生出对此类“信号”感兴趣的类

class FooPlayer:public PlayEventsReceiver{

void StartPlay(){...}
void StopPlay(){...}
};

但是如果我想要,而不是继承,将信号机制实现为一个属性,就像这样:

class BarPlayer{

PlayEventsReceiver receiver;

};

是否有可能以一种干净的方式在 BarPlayer 类中以某种方式实现纯虚函数而不创建中间派生类?

最佳答案

如果您没有派生类,那么编译器就无处放置它的函数。如果您正在寻找一些干净的东西,那么创建一个显式派生类可能就是最干净的了。

您无法回避您需要在某处提供函数实现的事实。

但是,您似乎可以通过创建未命名的类/结构匿名 执行此操作。但它并没有避免创建派生类,因为仍在创建匿名派生类:

// public interface so I use struct
struct PlayEventsReceiver {

virtual void StartPlay() = 0;
virtual void StopPlay() = 0;
};

class BarPlayer {

public:
struct : PlayEventsReceiver {

void StartPlay() override
{
std::cout << "Start Play\n";
}
void StopPlay() override
{
std::cout << "Stop Play\n";
}
} receiver;

};

int main()
{
BarPlayer bp;

bp.receiver.StartPlay();
}

关于C++属性实现功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078863/

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