设计问题迫使我将基类向下转换为派生类型
Design issue forcing me to down-cast base class to derived types
我有一个接受基类的类,但它需要接受派生类才能执行派生类特定的操作。然而,我需要它是多态的:
class I{
OL ol;
}
//----------------------------------------------------------------------------
class OD{
int data_member1;
int data_member2;
}
class FD : public OD {
int data_member3;
}
class ND : public OD{
int data_member4;
}
//-----------------------------------------------------------------------------------
class OL{
virtual void u(OD od) = 0;
}
class NL : public OL{
//Accepts OD-type for polymorphism, but only ever uses ND-type objects
void u(OD nd){
//Manipulate datamember1
//Manipulate datamember2
//Manipulate datamember3 (which FD doesn't have)
}
}
class CL : public OL{
//Accepts OD-type for polymorphism, but only ever uses FD-type objects
void u(OD fd){
//Manipulate datamember1
//Manipulate datamember2
//Manipulate datamember4 (which ND doesn't have)
}
}
问题是,我必须将OL::u()
的参数类型声明为OD
(这样我就可以使用多态性),但在NL::u()
和CL::u()
中,参数类型必须是派生的,这样我才能访问特定派生的数据成员(ND
没有datamember4
,FD
没有datamember3
)。
我该怎么办?我能想到的唯一解决方案是将NL::u()
和CL::u()
中的OL
对象下转换为派生类型,但这感觉很"黑客"。
我的总体目标是能够做到:
I i1;
OD fd = new FD();
i1.ol.u(fd);
I i2;
OD nd = new ND();
i2.ol.u(nd);
您试图使用多态性和继承性,但只有数据成员
如果你的基类声明了所有的抽象方法,那么yuo就可以调用这些方法,而不用担心数据成员在哪里。
即基类可以包含calc(),每个派生类中的calc(
相关文章:
- 无法转换类型 C++
- 包含可变参数包的第一个可转换类型的别名的结构
- 将 std::conditional 与不可转换类型(原始与指针)一起使用
- 链接方法时出现转换类型错误
- 如何避免隐式转换类型
- 在多重继承场景中动态强制转换类型
- 编译器不支持的转换类型
- 错误调用功能无法转换类型
- 我想看到一个在整个后缀表达式的上下文中查找转换类型 id 的示例
- 对于动态类型为强制转换类型的对象,dynamic_cast失败
- 无法在初始化中转换类型
- 如何让"auto"转换类型
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 如何从新运算符+(Template类)返回具有转换类型的对象
- 带有模板的基于枚举的工厂无法转换类型
- 使用SWIG类型映射通过字符串转换类型
- 对于可转换类型,设计比循环依赖项更好
- SWIG不能正确转换类型定义
- 将类型转换扩展到可转换类型的对/元组
- 想要将字符数组的部分转换/类型转换为值