实现函数的c ++属性

时间:2015-08-18 17:23:55

标签: c++ inheritance

假设一般玩家将特定事件通知给某些类别的对象。我创建了一个基类,其中一些虚函数保证存在于派生:

class PlayEventsReceiver{

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

我会从PlayEventsReceiver派生出对此类"信号"

感兴趣的类
class FooPlayer:public PlayEventsReceiver{

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

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

class BarPlayer{

    PlayEventsReceiver receiver; 

};

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

1 个答案:

答案 0 :(得分:1)

如果您没有派生类,则编译器无处可放置其功能。如果您正在寻找 clean 的东西,那么创建一个明确的派生类可能会像它一样干净。

你无法逃避某处需要提供功能实现的事实。

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

// 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();
}