我有一个基类和一个派生类
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/