C++ 遗产为什么会出现这种输出?

C++ 遗产为什么会出现这种输出?,c++,C++,下面的程序打印3和4,但我不能理解。有人能一步一步地解释我为什么有这个输出吗 #include <iostream> using namespace std; class A{ public: int f(int x){ cout << x << " " << endl; } }; class B : public A{

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

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


这并不奇怪。

不,它没有打印出来。你一定在运行其他程序。看到这个了吗。对我来说,它打印3,4OP得到-13、12和25作为输出,这是surprising@MatthiasB我在ideone上放了一个链接,链接的代码和我在ideone上执行的代码完全一样。我也这么做了,很明显,OP在那里犯了一个错误,因为问题现在更新了。如果OP的输出是真实的,那么仅仅说这个答案就没有多大价值……我的反对票:当这个答案发布时,这个问题特别是OP的预期输出是不同的。现在,由于问题被更改,这个答案是正确的,我会删除否决票,但是如果答案没有更改,SO机制不允许删除否决票。@MatthiasB我们应该在meta上请求更改。答案并没有改变,但问题是。我现在要做一个小编辑
3
4