我有一个基类和一个派生类

class A
{
public:
int a;
}

class B : public A
{
public:
int b;
}


如果我有一个指向B对象的类型A的指针,该如何检索到B对象的指针?



A * ptrA = new B;


如何使用ptrA访问b

最佳答案

如果确定A *实际上指向B,则可以无条件地这样做,而不会增加性能:

A * ptrA = new B;
B * ptrB = static_cast<B *>(ptrA);
ptrB->b = 42;


如果ptrA实际未指向B的实例,则将导致未定义的行为。如果不确定,则可以通过以下方式进行检查:

if (B * ptrB = dynamic_cast<B *>(ptrA)) {
  ptrB->b = 42;
} else {
  // it's not a B, do something else
}


此处的区别在于,dynamic_cast实际上将在运行时检查以确保强制转换正确,否则返回NULL。

请注意,仅当您的基类具有至少一个虚拟方法时,dynamic_cast才有效。感谢DietmarKühl在评论中指出了这一点。

关于c++ - 如何从基类指针访问顶层类中的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20030278/

10-12 19:22