0

我有两个类层次结构:

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)可以正常工作的构造函数,但是这种向下转换的复制构造函数在某种程度上不是很好。我检查过的所有答案都显示了使用指针的示例。

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

4

1 回答 1

1

类之间不同的功能应该通过虚函数公开。

然后,您无需将对象向下扔,您只需 return 即可unit。调用的成员函数将是您创建的对象的正确函数。

于 2013-03-25T18:04:25.567 回答