我有 G 级。
B 类:公共(public) G
A 类:公共(public) B
D 类:公共(public) G
C 类:公共(public) D
F 类:公共(public) G
E 类:公共(public) F
我可以从不同的类(class)访问 G(G 抱歉!!)。我必须得到一些 A 类的成员(例如,字符串 m_Astr)。
如何访问 A 字符串?如果我在类 G 中使用纯虚拟,除了 A 的实现之外,我还必须在 E 和 C 中实现这个 getStr 函数,而且我只需要为 A 实现。
请帮忙
最佳答案
如果您知道(以某种方式)指向的对象实际上是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
将是 NULL
如果p
实际上不是A
.然而,dynamic_cast
只能以这种方式与多态类一起使用:基类必须至少有一个 virtual
功能。 virtual
析构函数在这里会做得很好。
关于c++ - 除了使用纯虚拟之外,如何通过基类从派生类获取成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497771/