我需要通过Base类变量访问派生类成员变量。
Class A{
};
Class B:public A {
int data;
};
现在我需要做这样的事情
A *pb = new B()
pb->data = 10;
但问题是我无法访问Derived成员类。
是的我知道如何使用虚拟功能。
谢谢,非常感谢您的帮助。
答案 0 :(得分:2)
需求指向错误的设计。
但如果你真的坚持编写不好的代码,你可以回到B *
。
答案 1 :(得分:2)
如果没有虚拟功能,你唯一能做的就是向下传播它。有几种方法可以解决这个问题:
答案 2 :(得分:1)
简短的回答:你做不到。因为您的编译器不知道pb
是什么。它可以是A
类型。但是,您使用dynamic_cast
,如果不可能,则返回B
指针或NULL
。
A *pa = new B();
B *pb = dynamic_cast<B*>(pa);
if (pb) {
pb->data = 10;
}
else {
...
}
无论如何,如果你需要这样做,这可能意味着你应该修改你的设计,因为向上转换不是一个好主意。但有时候,你无法避免它。例如。当使用外部库等时。