看一个对象是什么类

wro*_*ame 0 c++ inheritance pointers class base

如果我A在C++中有一个指向基类的指针,我怎么能在代码中告诉指针是派生类B还是C

Jam*_*lis 6

假设基类A是多态的(即它至少有一个虚函数),你可以使用dynamic_cast.鉴于A* ap;:

if (B* bp = dynamic_cast<B*>(ap)) {
    // the object is a B
}
else if (C* cp = dynamic_cast<C*>(ap)) {
    // the object is a C
}
Run Code Online (Sandbox Code Playgroud)

  • @sje397:这是行不通的,因为在这种情况下“blah”是一个声明,而不是一个表达式。因为它是一个声明,所以`=`不是`operator=`,我认为大多数编译器不会在这里发出警告。 (2认同)