わかりましたので、次のコード (111222223) の出力に関する質問があります。
#include <iostream>
struct C {
virtual int eq(const C& other) const { return 1; }
};
struct SC : C {
virtual int eq(const C& other) const { return 2; }
virtual int eq(const SC& other) const { return 3; }
};
void go(const C& c, const C& c1, const SC& sc) {
using namespace std;
cout << c.eq(c) << endl;
cout << c.eq(c1) << endl;
cout << c.eq(sc) << endl;
cout << c1.eq(c) << endl;
cout << c1.eq(c1) << endl;
cout << c1.eq(sc) << endl;
cout << sc.eq(c) << endl;
cout << sc.eq(c1) << endl;
cout << sc.eq(sc) << endl;
}
int main(int argc, const char* argv[]) {
go(C(), SC(), SC());
return 0;
}
したがって、呼び出し元の実行時の型に基づいて適切な仮想メソッドを動的にバインドする参照でドット演算子を使用していることを理解しています (-> ポインターが必要ですが、ここでは動的な心構えには問題ありません)。私が理解していないのは、最後から 2 番目の cout 行が「3」ではなく「2」を出力する理由です。これは、メソッド シグネチャが静的であり、適切な派生型 SC の静的シグネチャに基づいてメソッドが選択されるためですか? 事前に助けてくれてありがとう!