このコードは、Objective-C での動的バインディングの古典的な例です [1] :
float total = tareWeight; // start with weight of empty container
int i, n = [self size]; // n = number of members
for (i = 0; i < n; ++i) { // loop over each member
id member = [self at:i]; // get next member
total += [member weight]; // accumulate weight of contents
}
return total; // return total weight to caller
この言語の経験があり、C++ で最初のステップを実行するプログラマーとして、私は知りたいです: C++ では、ある種の遅延バインディングもサポートされているため、これをどのように実装するのでしょうか?
この例では、各メンバーは任意のクラスに属することができると想定していますがweight
、もちろんメソッドの実装は必須です。最近では、プロトコルなどのメカニズムを使用して、実装に互換性を持たせることもできますが (その後、 として宣言member
します id<Matter>
)、機能するためにはまったく必要ありません。
C++ では、いわゆる仮想関数を使用してスーパー クラスを作成することが唯一の選択肢でしょうか?
編集
明確にするために、上記のコードは、コンポーネントの合計重量を返すコンテナ クラス メソッドと見なすことができます。コンテナに何が入るかは事前にはわかりません。それは任意のオブジェクトである可能性があります。これらのオブジェクトがメッセージに応答することだけがわかりますweight
。
[1]オブジェクト指向プログラミング、進化的アプローチ、第 2 版、1991 年- ブラッド J. コックス、アンドリュー J. ノボビルスキー - 第 4 章 65 ページ