C++虚拟功能与设计模式
C++ virtual function and design pattern
我有一个Data类型的抽象基类和两个继承类Data1和Data2。Data1和Data2具有不同的成员。我有一个抽象类Proc,它对这些数据进行操作。Proc有一个虚拟函数更新,它将引用Data作为参数。Proc1和Proc2都定义了自己的实现。然而,这两个实现都将使用在具体类Data1和Data2中定义的成员。在给定参数是引用数据的情况下,如何进行此操作?例如
class Data {};
class Data1: public Data{
int x;
};
class Data2: public Data{
string str;
};
class Proc{
virtual void update(const Data&) = 0;
};
class Proc1: public Proc{
update(const Data &d){
// this does not work
cout << x << endl;
}
};
class Proc2: public Proc{
update(const Data &d){
// this does not work
cout << str << endl;
}
};
谢谢你的建议。
更新:
也许我的问题是,为了多态性而定义抽象基类型Data并不总是一个好主意,而派生类几乎没有共同点(概念上除外)。将来扩展处理新的具体数据类型的Proc类可能会更容易?
我的proc类实际上充当了Data的容器,Data是Id和deque的映射。正如您所看到的,在Data中提供虚拟更新功能并不是一个好的解决方案。因为更新更多地与Proc相关(不过计算是基于具体的Data类型)。
您需要在Data
中放入一个名为update
的纯虚拟方法。然后在CCD_ 3和CCD_。面向对象编程的主要目标之一是将与其相关的数据和代码保持在一起:)。
使用dynamic_cast
应该可以完成这项工作。
class Proc1 : public Proc {
void update(const Data &d) {
Data1 const* data1Ptr = dynamic_cast<Data1 const*>(&d);
assert(data1Ptr != NULL);
// Now use data1Ptr
}
};
与Proc2
类似。
您执行的操作取决于两种运行时类型-这是由Double调度机制处理的情况。您可能想要查看Visitor模式。
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 资源管理设计模式
- 用于在回调中调用解析器的设计模式
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 在这种情况下我应该使用哪种设计模式
- C++中物体改变识别的设计模式?
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 工厂设计模式优化
- 使用C++模板的数据映射器设计模式
- 为什么以及如何使用原型设计模式
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 在C++中创建观察器设计模式的好方法
- 现代C++在多大程度上消除了对设计模式的需求?
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 用于存储由第一个功能创建的指针的设计模式将在以后使用
- C++虚拟功能与设计模式
- C++:类功能子集的推荐设计模式
- 工厂设计模式中的纯虚拟功能错误