0

这个问题是我在此处发布的后续内容

Synth 实现了 Generator 和 Track 有一个生成器成员(其中有一个 Synth)。我想做的是:

Track track = Track();
cout << track.generator.varA << endl;

但这不起作用,所以我猜我必须先以某种方式将生成器转换为 Synth,然后才能访问任何合成器方法或成员,但我不知道该怎么做。

4

2 回答 2

0

当您确定您拥有的基指针确实是派生类型时,要向下转换为派生类型,请执行以下操作:

static_cast<Derived*>(myBasePointer)

于 2013-03-03T17:04:20.453 回答
0

首先,generator是一个指针,因此您不能使用.运算符来访问指向对象的成员,就像您在此处所做的那样:

track.generator.varA // ERROR!

其次,既然你想要一个指向派生类的指针并且你有一个指向基类的指针,你应该使用dynamic_cast<>来获取一个(除非你确定指向的对象是派生类的一个实例,在这种情况下你可以使用static_cast<>):

Synth* p = dynamic_cast<Synth*>(track.generator);
if (p != nullptr)
{
    cout << p->varA << endl;
}
于 2013-03-03T17:06:07.410 回答