私はここで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
ますが、呼び出しでは、C ++はクラス内の関数を認識してfoo(1.0)
いませんか?void foo(double a)
Derived
私の考えでは、C ++には最初の呼び出しを説明するポリモーフィズムがありますが、過負荷の解決は2番目の呼び出しを説明するコンパイル時に行われるという競合する考えがあります。