c++ - 除了使用纯虚拟之外,如何通过基类从派生类获取成员

标签 c++ inheritance derived pure-virtual

我有 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/

相关文章:

c++ - Google Benchmark Iteration 是什么意思?

python - django-tables2 : Table subclassing and Meta inner class attributes

c++ - 继承:类字符串

c++ - 从基类更改为派生类的最佳方法

c++ - 将adt_proxy类型替换为值类型时的Boost fusion 错误

c++ - 如何将字符串的全局映射初始化为函数指针?

c++ - 使用 VS2010 构建 openSmile 库

javascript - 如何设置属于基类[继承]的子类对象的属性(属性)? (将 Base 的属性传递给 Child)

mysql - 不使用子查询连接派生列

C++ 类型转换损坏的结构