0

この質問は、私がここに投稿したことのフォローアップです

Synth は Generator を実装し、Track にはジェネレーター メンバー (Synth を含む) があります。私がやりたいことは次のようなものです:

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

しかし、これはうまくいかないので、シンセサイザーのメソッドやメンバーにアクセスする前に、まずジェネレーターをシンセにキャストする必要があると思いますが、その方法がわかりません。

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 に答える