以下程序打印3和4,但我无法理解。任何人都可以一步一步地解释我为什么我有这个输出??
#include <iostream>
using namespace std;
class A{
public:
int f(int x){
cout << x << " " << endl;
}
};
class B : public A{
public:
int f(int y){
A :: f(y+1);
}
};
void g(A a, B b){
a.f(3), b.f(3);
}
int main(){
B p;
B q;
g(p,q);
system("pause");
return 0;
}
答案 0 :(得分:2)
首先,您没有虚函数,因此将调用相应类的函数。因此,您只需致电a::f(3)
和B::f(3)
即可。第二,即使f 虚拟,你也会通过值传递g
的参数,这意味着发生了向上转换,因此在g
中你只有一个A
的实例, B
的实例,不涉及多态性。因此output是:
3
4
不是很令人惊讶。