这是一个设计问题。因此,我得到了一个包含许多纯虚方法的抽象类。有时,我意识到我不需要重写这些方法,因为我对这些功能不感兴趣。因此,我从纯虚拟(= 0)更改为简单的可覆盖的空方法。但是现在,子类可以覆盖一个方法,但不能覆盖与其相关的另一个方法。这可能会导致问题...是否有一种强制编译器说“如果覆盖此方法,也应覆盖此方法”的好方法! ?
一个简单的解决方案是保留一个抽象类并拥有一个默认的子类,如下所示:
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
并实现整个过程。
AFAIK,C ++中没有这样的机制。但是,如上所述,如果遇到这种情况,即您不一定总是需要在接口(抽象类)中定义接口,那么您的设计就无法正常工作。