如何通过基类指针(向上转换)获取派生类数据成员

时间:2015-05-19 17:45:04

标签: c++

class Base{
common methods
};
class Derived: public Base{
private: 
int a;
char* arr;
public: 
Ctor
Dtor
};

int main(){
Base* B;
Derived D;
B = &D;

如何从B中提取有关D的数据成员的信息?

不介意语法错误,如果我有一个以上的派生类,我更关心如何获取数据成员或如何编译两个派生类。

3 个答案:

答案 0 :(得分:0)

当您知道指针对象是Derived时,您可以向下转发指针从Base*Derived*,最好使用{{1 }}。如果您不知道,但基类有一个或多个虚拟方法,那么您可以通过static_cast 检查。但是最好你应该在dynamic_cast中使用虚拟方法,这样你就可以在不进行强制转换的情况下做任何事情,否则,你最好不要丢弃特定的类型信息。

答案 1 :(得分:0)

首先需要将其强制转换为派生类型:

假设v2是Derived类的字符串成员

if (auto* d = dynamic_cast<Derived*>(B))
    std::cout << "v2: " << d->v2 << std::endl;

答案 2 :(得分:0)

在Base中定义虚函数,然后在Derive类中实现它。这有帮助吗?