最近 iPhone の開発を行っていた私は、オブジェクトの可変性に関して、iPhone SDK で多く使用されている興味深いデザイン パターンに気付きました。
不変のクラスを定義し、そこNSFoo
から可変の子孫を派生させるのが典型的なアプローチのようNSMutableFoo
です。一般に、NSFoo
クラスはデータ メンバー、ゲッター、および読み取り専用操作を定義し、派生したものNSMutableFoo
はセッターと変更操作に追加されます。
C++ に慣れてきた私は、これが C++ で同じコードを書く場合とはまったく逆のように思われることに気付きました。確かにそのアプローチを取ることもできますが、より簡潔なアプローチは、単一のFoo
クラスを作成し、getter と読み取り専用操作をconst
関数としてマークし、可変操作と setter を同じクラスに実装することだと私には思えます。Foo const*
その後、変更可能なクラスになりますが、タイプFoo const&
などはすべて実質的に不変の同等物です。
私の質問は、状況に対する私の見解は理にかなっていますか? Objective-C の動作が異なる理由は理解できますが、C++ の 2 クラス アプローチには、私が見逃した利点はありますか? それとも私はポイントを完全に見逃していますか?
あまり深刻な質問ではありません - 何よりも私自身の好奇心のためです.