class Base {
public:
virtual void myFunc(double a, double b) { };
virtual void myFunc(double a) { };
};
class Derived : public Base {
public:
virtual void myFunc(double a) { return this->myFunc(a, 0.0); };
}; // ^^^^^^^^^^^^^^^^^^^^
前のコードはコンパイルされません:どうやら、コンパイラは、私は基本クラスで定義された関数、またはそれをオーバーライドする任意の関数を呼び出すようにしようとしていることをerror C2660: 'Derived::myFunc' : function does not take 2 arguments
を見ることはできません。一方、次のコードは、[OK]をコンパイルします。これはVisual 2010のコンパイルのバグですか?
class Base {
public:
virtual void myFunc2(double a, double b) { };
virtual void myFunc(double a) { };
};
class Derived : public Base {
public:
virtual void myFunc(double a) { return this->myFunc2(a, 0.0); };
};
私は私が最初の例で何をしようとしていると思う有効なC++であるので、これはVS2010コンパイラのバグですか?私は
編集VS2008
おかげで同じ結果を持っている:私が見つけたこの問題を回避するには、
virtual void myFunc(double a) { return ((Base*)this)->myFunc(a, 0.0); };
を使用することですが、私は誰でも確認することができ、それはまったく同じ効果を持つ100%わからないんだけど?
ヒント:バグではありません。 –
クラス 'Derived'の先頭に' Using Base :: myFunc'を追加してみてください。 –
可能な複製[派生クラスのオーバーライドされた関数が、基本クラスの他のオーバーロードを隠すのはなぜですか?](http://stackoverflow.com/questions/1628768/why-does-an-overridden-function-in-the- derived-class-hide-other-overloads-of-the) – Tony