我需要通过基类静态变量访问派生类成员

I need to access a derived class member through the base class static variable

本文关键字:访问 变量 派生 成员 静态 基类      更新时间:2023-10-16

我需要通过基类变量访问派生类成员变量。

Class A{
};
Class B:public A {
  int data;  
};

现在我需要做一些类似的事情

A *pb = new B()
pb->data = 10;

但问题是我无法访问没有派生成员类的派生成员类。

是的,我知道如何使用虚拟函数。

谢谢,我真的很感谢你的帮助。

需求指向一个错误的设计。

但是,如果您真的坚持编写糟糕的代码,您可以直接返回到B *

如果没有虚拟函数,你唯一能做的就是向下转换它

  • 如果启用了RTTI,并且父类中至少有一个虚拟函数,则可以使用dynamic_cast,这样可以检查强制转换是否成功
  • static_cast将允许您在继承树中强制转换到您下面的某个对象,但您将失去检查它是否成功的能力
  • 你也可以完全放弃谨慎,使用C型演员阵容

简单回答:你不能。因为您的编译器不知道pb是什么。它的类型可能是A。但是,您可以使用dynamic_cast,它返回B指针,如果不可能,则返回NULL

A *pa = new B();
B *pb = dynamic_cast<B*>(pa);
if (pb) {
    pb->data = 10;
}
else {
    ...
}

无论如何,如果你需要这样做,这可能意味着你应该修改你的设计,因为升级不是一个好主意。然而,有时你无法避免它。例如,当使用外部库等时。