2番目の呼び出しで、以下のコードで基本クラスのメソッドが呼び出されるのはなぜですか?基本C++の代わりに導出関数が呼び出される
基本クラス:
class Number{
public:
Number(){}
virtual print(){cout<<"Number"<<endl;}
virtual bool isEqual (Number* number){ cout<<"Base class"<<endl;}
};
派生クラス:
class Int: public Number{
int member;
public:
Int(int number){ member =number; }
int get Number(){ return member; }
print(){ cout<<"member"<<endl;}
bool isEqual(Int* number){ return member == number->getNumber(); }
};
主な機能:ところで
int main(){
Int i1(3);
Int i2(4);
Number* nPtr = &i1;
nPter->print(); /// prints 3
nPter->isEqual(&i2); /// "Base class"
...
:
i1.isEqual(&i2); /// prints 0 -- works fine
これらの機能に「オーバーライド」を追加してください。あなたは驚くだろう。また、 'print'は戻り値の型がありません。擬似コードのためには少し擬似です。 – StoryTeller
isEqualは、ベースクラスと派生クラスで異なるシグネチャを持ちます。あなたは関数をオーバーロードしました。基本クラスのポインタで呼び出すと、Number :: isEqualが呼び出され、Intポインタ/ refで呼び出されたときに呼び出されます。 Int :: isEqualを呼び出します。 – cppcoder