我能否确定转换为父类的对象类型最初是否是C ++中的子类?

卢普格拉

假设我有动物课,还有狗类,它是从动物继承的。如果我键入将Dog对象转换为Animal对象,以后是否有可能得知它原来是Dog?

具体来说,以下是我要执行的操作的要点:

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之类的东西,但据我所知,一旦将对象投射到Animal上,它们就会告诉我它是Animal。理想情况下,将有一些操作尝试将Animal投放到Dog中,但是如果无法将对象投放到Dog中,则返回false。

也许这里需要注意的重要一点是,对于我的应用程序,我无法控制Dog和Animal的详细信息,并且类型转换发生在我尚未编写的代码中,因此我看不到泛型的明显解决方案。似乎这种事情很普遍,因此我可能在这里错过了一些简单的事情。有什么建议?

普拉丹

编辑:其余的答案通常适用。但是由于您无法控制Animaland Dog,因此可以使用dynamic_cast这仍然需要Animal是多态的。

bool Owner::takeOnWalk(Animal* animalIn) {
  If (dynamic_cast<Dog*>(animalIn)) {return true};
  return false;
}

REST:您可以从搜集这些信息多态对象使用的组合typeidstd::type_info并且std::type_index,这取决于你想如何来代表它。但这几乎肯定是错误的解决方案。改用虚函数。例如:

class Animal
{
 public:
 virtual bool WantsToWalk() = 0 {return false;}
 virtual ~Animal(){}
};

class Dog: public Animal
{
 public:
 virtual bool WantsToWalk(){return true;}
};

class Owner {
  bool takeOnWalk(Animal* animalIn) {return animalIn->WantsToWalk();}
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用子类型初始化父类中的对象

来自分类Dev

C ++中的继承(父类和子类)

来自分类Dev

遍历页面中的父类,并使用python中的硒确定父类是否存在子类

来自分类Dev

在子类中调用父方法

来自分类Dev

如何从Ruby中的抽象父类确定子类名称

来自分类Dev

Scala中的ADT子类型

来自分类Dev

子类型中的替代方差

来自分类Dev

函数类型中的快速子类

来自分类Dev

子类型中的替代方差

来自分类Dev

函数类型中的快速子类

来自分类Dev

在子类中强制类变量

来自分类Dev

Java中的类和子类

来自分类Dev

Java在子类中创建对象

来自分类Dev

C ++当我不知道子类型时,从基类中调用子类函数

来自分类Dev

C ++当我不知道子类型时,从基类中调用子类函数

来自分类Dev

在父类中访问子类变量

来自分类Dev

应在子类或父类中传递参数

来自分类Dev

在 Rspec 中测试子类继承的父类。

来自分类Dev

在父类中获取子类属性

来自分类Dev

如何访问子类中的父类方法

来自分类Dev

C ++中的嵌套子类

来自分类Dev

我无法在 Dart 中将父类转换为其子类

来自分类Dev

子类的对象创建是否创建超类的对象(如果是)是否可以在子类中访问它?

来自分类Dev

如何在WordPress中显示帖子类型的子类别?

来自分类Dev

将属性类型更改为子类中的子类

来自分类Dev

如何使用在子类PHP的父类中创建的对象

来自分类Dev

是否可以从子类和父类中绘制 QWidget?

来自分类Dev

从模板类继承,在子类中声明类型

来自分类Dev

在子类Java中更改类变量类型