C ++有一种方法可以强制重写一组方法,如果其中一个方法在子类中具有重写功能?

问题描述 投票:0回答:2

这是一个设计问题。因此,我得到了一个包含许多纯虚方法的抽象类。有时,我意识到我不需要重写这些方法,因为我对这些功能不感兴趣。因此,我从纯虚拟(= 0)更改为简单的可覆盖的空方法。但是现在,子类可以覆盖一个方法,但不能覆盖与其相关的另一个方法。这可能会导致问题...是否有一种强制编译器说“如果覆盖此方法,也应覆盖此方法”的好方法! ?

c++ overriding abstract
2个回答
1
投票

一个简单的解决方案是保留一个抽象类并拥有一个默认的子类,如下所示:

class AbstractMap<TKey, TValue>
{
public:
    virtual TValue Get(TKey&& key) = 0;
    virtual bool TryGet(TKey&& key, TValue& result) = 0;
};


class PartialMap<TKey, TValue> : public AbstractMap<TKey, TValue>
{
public:
    TValue Get(TKey&& key) override {
        TValue result;
        if (TryGet(std::forward<TKey>(key), result)) {
            return result;
        }
        throw KeyNotFoundException();
    };
};

现在您可以从PartiallyImplementedMap继承,并且仅在默认实现满足您的情况下才实现TryGet。否则,您可以继承AbstractMap并实现整个过程。


0
投票

AFAIK,C ++中没有这样的机制。但是,如上所述,如果遇到这种情况,即您不一定总是需要在接口(抽象类)中定义接口,那么您的设计就无法正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.