好的,我有一个与以下代码的输出有关的问题(即 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;
}
所以我知道我正在使用带有引用的点运算符,该引用将根据调用者的运行时类型动态绑定正确的虚拟方法(需要 -> 带有指针,但在这里动态思维可以)。我不明白为什么倒数第二个 cout 行打印'2'而不是'3'。这是因为方法签名是静态的,所以方法是根据正确派生类型 SC 中的静态签名选择的?我在这里先向您的帮助表示感谢!