假设我有Animal类,而另一类Dog是从Animal继承而来的。如果我输入一个Dog对象作为一个Animal对象,是否有可能在后来知道它最初是一个Dog?我可以告诉,如果一个对象类型转换成父类最初是子类在C++中?
具体而言,这里是我想要做的要点:
class Animal {};
class Dog: Animal {};
class Owner {
bool takeOnWalk(Animal* animalIn);
};
bool Owner::takeOnWalk(Animal* animalIn) {
If (animalIn->isA(Dog)) {return true}; // what do I use here instead of isA?
return false;
}
int main() {
Dog* fido = new Dog();
Animal* gato = new Animal();
Owner* fred = new Owner();
Owner->takeOnWalk(fido); //I want this to return true
Owner->takeOnWalk(gato); //this should return false
{
我已经尝试了一些事情喜欢的typeof除非据我了解,这些会告诉我它的动物一旦物体被铸造成动物。理想情况下,会有一些操作尝试将动物投射到狗身上,但如果物体不能投射到狗身上则会返回错误。
也许这里的一个重要提示是,对于我的应用程序,我无法控制Dog和Animal的细节,并且类型转换发生在我没有编写的代码中,所以我没有看到泛型的明显解决方案。看起来这种事情会很常见,所以我可能在这里错过了一些简单的东西。有什么建议么?
你需要一个虚拟成员在基类('虚拟〜动物(){}'是一个不错的选择)和'dynamic_cast的(animalIn)'(ISA) –
2015-02-10 21:55:21