这个问题是what I posted here
的后续问题Synth实现Generator和Track有一个生成器成员(其中包含一个Synth)。我想做的是:
Track track = Track();
cout << track.generator.varA << endl;
但这不起作用所以我猜我必须先以某种方式将生成器转换为Synth,然后我才能访问任何合成器方法或成员,我无法弄清楚如何做到这一点。
答案 0 :(得分:0)
当您确定您拥有的基本指针实际上是派生类型时,要向下转换为派生类型,请执行以下操作:
static_cast<Derived*>(myBasePointer)
答案 1 :(得分:0)
首先,generator
是一个指针,因此您无法使用.
运算符来访问指向对象的成员,就像您在此处一样:
track.generator.varA // ERROR!
其次,既然你想要一个指向派生类的指针并且你有一个指向基类的指针,你应该使用dynamic_cast<>
得到一个(除非你确定对象指向to是派生类的一个实例,在这种情况下,您可以使用static_cast<>
):
Synth* p = dynamic_cast<Synth*>(track.generator);
if (p != nullptr)
{
cout << p->varA << endl;
}