我在这里阅读 C++ 谜题:http: //gotw.ca/gotw/005.htm
我不明白他对静态与动态重载解决方案(或默认参数)的解释,所以我试图提炼这个问题并自己编写一些测试:
class Base {
public:
virtual void foo() {cout << "base/no parameters" << endl;}
virtual void foo(int a) {cout << "base/int" << endl;}
};
class Derived : public Base {
public:
void foo() {cout << "derived/no parameters" << endl;}
void foo(double a) {cout << "derived/int" << endl;}
};
int main() {
Base* ptr = new Derived;
ptr->foo();
ptr->foo(1.0);
}
输出是:
derived/no parameters
base/int
为什么在对的调用中foo()
,C++ 似乎认识到它指向一个Derived
但在调用foo(1.0)
中,C++ 在类中看不到void foo(double a)
函数Derived
?
在我看来,有一些相互竞争的想法,即 C++ 具有多态性,这解释了第一次调用,但重载决议是在编译时完成的,这解释了第二次调用。