考虑以下假设的面向对象语言中的类定义,该语言支持继承并使用动态绑定。尽管语法相似,但不应假定该语言是Java或 C++。
Class P
{
void f(int i)
{
print(i);
}
}
Class Q subclass of P
{
void f(int i)
{
print(2*i);
}
}
现在考虑以下程序片段:
P x = new Q();
Q y = new Q();
P z = new Q();
x.f(1); ((P)y).f(1); z.f(1);
这里 ((P)y) 表示 y 到 P 的类型转换。 执行上述程序片段产生的输出将是
(一) 1 2 1
(乙) 2 1 1
(C) 2 1 2
(四) 2 2 2答案:(一)
说明:由于我们没有在类中使用虚函数,所以早期绑定将发生在这里,即编译器将通过查看对象/指针的类型而不是它们将在运行期间存储的地址来将对象与函数绑定时间。
这个问题的测验