【发布时间】:2016-06-29 13:35:13
【问题描述】:
我似乎无法理解编译器如何优先选择哪个函数。 这是一个示例代码:
#include <iostream>
using namespace std;
class A{
public:
int f() {return 1;}
virtual int g() {return 2;}
};
class B: public A {
public:
int f() {return 3;}
virtual int g() {return 4;}
};
class C: public A{
public:
virtual int g() {return 5;}
};
int main () {
A *pa;
B b;
C c;
pa = &b;
cout<< pa -> f()<<endl<<pa -> g() << endl;
pa = &c;
cout<< pa -> f() << endl; cout<< pa -> g() << endl;
return 0;
}
每次将调用哪个函数(g() 和 f())以及为什么?
【问题讨论】:
-
如果您无法弄清楚为什么代码的行为方式,请运行程序以找出并在此处报告。但首先,试着用你对虚拟调度的知识来解释你自己。
-
我跑了,问题是为什么...
-
如果你运行它,那么你肯定知道调用了哪个函数,不是吗?你确实问过了。
-
你实际上是在问两个问题哪个?为什么?如果您已经知道第一个的答案,那么最好不要问。我最近犯了一个类似的错误,它确实增加了很多不必要的混乱。即使它们看起来密切相关,每个问题都有一个问题总是更好
标签: c++ inheritance virtual