這是第2部分,以我以前問一個問題:Is it possible to have polymorphic member overloading in C++?C++雙重分派問題
使用我創造了這個例子中,維基例子。 http://en.wikipedia.org/wiki/Double_dispatch
我的問題是,編譯的代碼永遠不會查找vtable,並始終使用基地,而不是繼承類。這裏是我的代碼:
#include <iostream>
class xEntity;
class xVehicle;
class xMapObject
{
public:
virtual void Bump(xMapObject&) { std::cout << "MapObject Bump MapObject\n"; };
virtual void Bump(xEntity&) { std::cout << "MapObject Bump Entity\n"; };
virtual void Bump(xVehicle&) { std::cout << "MapObject Bump Vehicle\n"; };
};
class xEntity : public xMapObject
{
public:
virtual void Bump(xMapObject&) { std::cout << "Entity Bump MapObject\n"; };
virtual void Bump(xEntity&) { std::cout << "Entity Bump Entity\n"; };
virtual void Bump(xVehicle&) { std::cout << "Entity Bump Vehicle\n"; };
};
class xVehicle : public xEntity
{
public:
virtual void Bump(xMapObject&) { std::cout << "Vehicle Bump MapObject\n"; };
virtual void Bump(xEntity&) { std::cout << "Vehicle Bump Entity\n"; };
virtual void Bump(xVehicle&) { std::cout << "Vehicle Bump Vehicle\n"; };
};
int main(int argv, char **argc)
{
xEntity Entity;
xVehicle Vechile;
xMapObject &EntityRef = Entity;
xMapObject &VehicleRef = Vechile;
VehicleRef.Bump(EntityRef);
return 0;
}
然而,輸出始終是:
Vehicle Bump MapObject
這個神祕任何幫助是極大的讚賞。
它使一個很大的意義,現在打電話。謝謝! – 2011-01-12 16:58:33
如果這回答了您的問題,您應該將其標記爲已接受。 – Puppy 2011-01-12 17:01:52