动态绑定是指使用正在操作的对象的相应的成员函数。但是,这并不意味着对所有的参数都进行了最合适的匹配。
C++中,在C++中始终对方法的参数进行静态推导。
下面的程序,大家猜下结果是什么?
class Base
{
public:
virtual void foo( const Base & x ); // METHOD A
virtual void foo( const Derived & x ); // METHOD B
};
class Derived : public Base
{
public:
virtual void foo( const Base & x ); // METHOD C
virtual void foo( const Derived & x ); // METHOD D
};
void whichFoo( Base & arg1, Base & arg2 )
{
arg1.foo( arg2 );
}
void Base::foo( const Base & x )
{
cout << "METHOD A" << endl;
}
void Base::foo( const Derived & x )
{
cout << "METHOD B" << endl;
}
void Derived::foo( const Base & x )
{
cout << "METHOD C" << endl;
}
void Derived::foo( const Derived & x )
{
cout << "METHOD D" << endl;
}
int main( )
{
Base b;
Derived d;
whichFoo( b, b );
whichFoo( b, d );
whichFoo( d, b );
whichFoo( d, d );
return 0;
}