2
#include <iostream>

using namespace std;

class Base {
public:
virtual void some_func(int f1)
{
cout <<"Base is called: value is : " << f1 <<endl;
}
};

class Derived : public Base {
public:
virtual void some_func(float f1)
{
cout <<"Derived is called : value is : " << f1 <<endl;
}
};


int main()
{
int g =12;
float f1 = 23.5F;

Base *b2 = new Derived();
b2->some_func(g);
b2->some_func(f1);
return 0;

}

出力は次のとおりです。

Base is called: value is : 12
Base is called: value is : 23

クラスで利用可能な引数としてfloatを持つバージョンがあるにもかかわらず、2番目の呼び出しがクラスの関数b2->some_func(f1)を呼び出すのはなぜですか?BaseDerived

4

2 に答える 2

4
  1. 引数が同じ型を持たないため、実際にはオーバーライドされません。
  2. オーバーライドされていないため、へのポインターはメソッドBaseのみを知っているintため、縮小変換を実行し (警告があるはずです)、 を呼び出しますBase::some_func(int)
于 2013-07-05T12:17:53.820 に答える
2

オーバーロードとオーバーライドを混同しています。オーバーライドの場合、関数のシグネチャは同じままでなければなりません。C++ のドキュメントをもう一度確認してください。お役に立てば幸いです。

于 2013-07-05T12:16:32.780 に答える