如何通过基类从派生类中获取成员,除了使用纯虚拟

时间:2013-12-10 15:00:22

标签: c++ inheritance derived pure-virtual

我上G级。


B类:公共G

A类:公共B


D类:公共G

C类:公共D


F级:公共G

E级:公共F


从另一个班级,我可以访问G(对不起!!)。我要得到一些A类的成员(例如,字符串m_Astr)。

如何访问A字符串?如果我在G类中使用纯虚拟,除了A的实现之外,我还必须在E和C中实现这个getStr函数,我只需要它为A.

请帮助

1 个答案:

答案 0 :(得分:2)

如果知道(某种方式)指向的对象实际上是 A的实例,那么您可以使用static_cast

G* p = get_the_thing();
A* a = static_cast <A*> (p); // OK

但是,如果上面p指向的对象没有实例化A,那么上面的代码将产生未定义的行为。

更安全的方法是使用dynamic_cast

G* p = get_the_thing();
A* a = dynamic_cast <A*> (p); // OK

如果a不是实际 NULLp将是A。但是,dynamic_cast只能以这种方式使用多态类:基类必须至少有一个virtual函数。一个virtual析构函数在这里做得很好。

相关问题