C++ 如何通过基类从派生类获取成员(使用纯虚拟类除外)

C++ 如何通过基类从派生类获取成员(使用纯虚拟类除外),c++,inheritance,derived,pure-virtual,C++,Inheritance,Derived,Pure Virtual,我上过G班 B类:公共G类 A类:公共B类 D类:公共G类 C类:公共D类 F类:公共G类 E类:公共F类 从另一个类中,我可以访问G(G对不起!!)。我要找一些A类的成员(比如字符串m_Astr) 如何访问A字符串?如果我在类G中使用纯虚拟,那么除了A的实现之外,我还必须在E和C中实现这个getStr函数,并且我只需要A 请帮助如果您知道(不知何故)指向的对象实际上是A的实例,那么您可以使用静态\u cast: G* p = get_the_thing(); A* a = static

我上过G班


B类:公共G类

A类:公共B类


D类:公共G类

C类:公共D类


F类:公共G类

E类:公共F类


从另一个类中,我可以访问G(G对不起!!)。我要找一些A类的成员(比如字符串m_Astr)

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


请帮助

如果您知道(不知何故)指向的对象实际上是
A
的实例,那么您可以使用
静态\u cast

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

如果
p
实际上不是
a
,则
a
将是
NULL
。但是,
dynamic\u cast
只能以这种方式与多态类一起使用:基类必须至少有一个
virtual
函数。
virtual
析构函数在这里很好。

你的
E
对象与任何
A
有什么关系?我想你的意思是,你想通过引用
B
G
(A的基类),而不是
E
来访问
A
(一个不相关的类,不能是
A
的实例)?在第一种情况下,
dynamic\u cast
可能是你想要的;在第二种情况下,你不能,因为没有
A
可以访问。A既不是E的祖先,也不是E的后代。对不起!我的意思是G,不是E…。编辑:(是迈克,G,(不是E).你能给我解释一下如何使用动态强制转换吗?@user1961415:Edited。
G* p = get_the_thing();
A* a = dynamic_cast <A*> (p); // OK