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

时间:2012-02-15 19:24:48

标签: c++ inheritance virtual-functions

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

Class A{

};

Class B:public A {
  int data;  
};

现在我需要做这样的事情

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

但问题是我无法访问Derived成员类。

是的我知道如何使用虚拟功能。

谢谢,非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

需求指向错误的设计。

但如果你真的坚持编写不好的代码,你可以回到B *

答案 1 :(得分:2)

如果没有虚拟功能,你唯一能做的就是向下传播它。有几种方法可以解决这个问题:

  • 如果启用了RTTI并且父类中至少有一个虚拟函数,则可以使用dynamic_cast,这样可以检查投射是否成功。
  • static_cast会让你在继承树中转换为你下面的东西,但是你无法检查它是否成功。
  • 你也可以完全谨慎对待风,并使用C型演员。

答案 2 :(得分:1)

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

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

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