生日,
如果您发现必须将派生类从一种类型转换为另一种派生类型,那么这就是初始设计存在问题的味道。
我的直觉是你错误地表示了一个 Manager 对象。
回到基础并从 OO 术语中思考,您的基类 (Contact) 包含 Employee 和 Manager 对象的公共元素。任何派生对象都只是基类的特化。
在这种情况下,经理不是员工的实例吗?
Manager 和 Employee 类都应该有一个 reportsTo 数据成员,它也是 Employee 类型。
目前我能看到的唯一区别是 Manager 对象现在有一个 Employee 对象的集合,这些对象是它们自己的 directReports。这可能应该实现为指向 Employee 对象容器的指针。
我想不出任何需要将 Employee 对象与 Manager 对象分开的行为专业化。
嗯,也许可以创建包含联系人详细信息的基类 Person。
编辑:对不起,从你的评论我想我不够清楚。我所描述的不会导致两个单独的类都直接从您的 Contact 类派生,因此您必须在运行时将 Employee 的实例更改为 Manager,这是您最初的问题。
也就是说,我认为您不应该有两个派生类,一个 Employee 和一个 Manager,直接从您的 Contact 类继承。
这两种情况不都是受雇于公司的人员类型吗?为什么要区分经理和员工?员工成为经理后是否不再是员工?
拥有两个派生类,一个 Manager 和一个 Employee,恕我直言,这是完全错误的。您是否尝试过根据“isa”和“has a”关系来分解事物。那么你就可以看到你的基本结构是错误的了。
说员工“isa”联系人是没有意义的。员工“isa”个人和个人“拥有”一组联系方式的可能性更大。
也许将 Manager 类派生为 Employee 的特化?员工“isa”人。经理“isa”员工,其中“isa”人。
HTH
干杯,