遗产。为何输​​出?

时间:2014-06-17 08:53:49

标签: c++

以下程序打印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;
}

1 个答案:

答案 0 :(得分:2)

首先,您没有虚函数,因此将调用相应类的函数。因此,您只需致电a::f(3)B::f(3)即可。第二,即使f 虚拟,你也会通过值传递g的参数,这意味着发生了向上转换,因此在g中你只有一个A的实例, B的实例,不涉及多态性。因此output是:

3
4

不是很令人惊讶。