私は C++ でデザイン パターンを実装しており、クラスで構成を介してインターフェイスを利用したいと考えています。これにより、インターフェイスを実装するさまざまな方法を研究するようになりました。この用語の定義を明確にしたいと思います。
質問する
825 次
1 に答える
6
非仮想インターフェイスは、仮想ではないパブリック メンバー関数ですが、通常はオーバーライド可能な仮想関数の観点から実装されることが期待されます。
class Interface
{
public:
int compute()
{
return compute_impl();
}
private:
virtual int compute_impl() = 0;
protected:
virtual ~Interface() { }
};
ここでの素晴らしい点は、実装が実際には であるということです。これは、プライベート メソッドをオーバーライドできるためです。外部から呼び出すprivate
ことはできません。
対照的に、抽象インターフェイスはそれ自体が仮想であり、インターフェイス クラスでは純粋に仮想です。
class Interface
{
public:
virtual int compute() = 0;
protected:
virtual ~Interface() { }
};
2 つのアプローチは表面的には似ていますが、非仮想インターフェイスのイディオムの利点は、インターフェイスが仮想メンバー関数の実装の詳細に煩わされないことです。言い換えれば、インターフェイスのさまざまな実装が仮想関数をオーバーライドすることによってその契約を満たすという事実は、インターフェイスのパブリックな側面の一部ではない実装の詳細です。特に、作成者は、ユーザーが独自の継承とオーバーライド階層を開発したことを心配することなく、関数の実装方法を将来自由に変更できます。
于 2013-08-30T23:24:56.580 に答える