C ++向下转型

时间:2013-03-03 17:02:25

标签: c++ interface casting member

这个问题是what I posted here

的后续问题

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

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

但这不起作用所以我猜我必须先以某种方式将生成器转换为Synth,然后我才能访问任何合成器方法或成员,我无法弄清楚如何做到这一点。

2 个答案:

答案 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;
}