这个问题是我在此处发布的后续内容
Synth 实现了 Generator 和 Track 有一个生成器成员(其中有一个 Synth)。我想做的是:
Track track = Track();
cout << track.generator.varA << endl;
但这不起作用,所以我猜我必须先以某种方式将生成器转换为 Synth,然后才能访问任何合成器方法或成员,但我不知道该怎么做。
这个问题是我在此处发布的后续内容
Synth 实现了 Generator 和 Track 有一个生成器成员(其中有一个 Synth)。我想做的是:
Track track = Track();
cout << track.generator.varA << endl;
但这不起作用,所以我猜我必须先以某种方式将生成器转换为 Synth,然后才能访问任何合成器方法或成员,但我不知道该怎么做。
当您确定您拥有的基指针确实是派生类型时,要向下转换为派生类型,请执行以下操作:
static_cast<Derived*>(myBasePointer)
首先,generator
是一个指针,因此您不能使用.
运算符来访问指向对象的成员,就像您在此处所做的那样:
track.generator.varA // ERROR!
其次,既然你想要一个指向派生类的指针并且你有一个指向基类的指针,你应该使用dynamic_cast<>
来获取一个(除非你确定指向的对象是派生类的一个实例,在这种情况下你可以使用static_cast<>
):
Synth* p = dynamic_cast<Synth*>(track.generator);
if (p != nullptr)
{
cout << p->varA << endl;
}