我有两个类层次结构:
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)
的构造函数,但效果很好,但是这种向下复制的构造函数在某种程度上不是很好。我检查过的所有答案都显示了使用指针的示例。有什么更好的解决方案?还有其他选择吗?
最佳答案
您的类之间不同的功能应通过virtual functions公开。
然后,您无需将对象放下,而只需返回unit
。调用的成员函数将是您创建的对象的正确函数。