避免沿并行层次结构降低值

时间:2013-03-25 17:55:04

标签: c++ downcast

我有两个类层次结构:

BaseUnit <- S1Unit , BaseUnit <- S2Unit, ..S3Unit, S4Unit

Base <- S1 , Base <- S2

Base中,我存储了单位的值。

class Base {
  protected: BaseUnit unit; // actually this is an upcast of S1Unit, S2Unit
  // of course I do several things with unit on methods of Base 
}

基于S1Unit,S2Unit ..

S1::S1(S1Unit s1unit) : unit(s1unit) { .. }

但是,如果我现在想要返回S1中的专业单位,我最好怎么做呢?

S1Unit S1::getUnit() const { return this->unit; /* how to cast down? */ }

我可以实现S1Unit BaseUnit S1Unit::S1Unit(BaseUnit)的构造函数,它工作得很好,但是这种向下的复制构造函数不太适合。我检查的所有答案都显示了使用指针的示例。

什么是更好的解决方案?有其他选择吗?

1 个答案:

答案 0 :(得分:1)

您的课程之间的功能应该通过virtual functions公开。

然后,您不需要抛弃对象,只需返回unit即可。被调用的成员函数将是您创建的对象的正确函数。