【发布时间】:2015-04-02 17:42:13
【问题描述】:
我有一个数据类型的抽象基类和两个继承类,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 的容器,它是 Id 和 deque 的映射。如您所见,在 Data 内部提供虚拟更新功能并不是一个好的解决方案。因为更新与 Proc 更相关(计算确实基于具体的数据类型)。
【问题讨论】:
-
不相关的注释,基本类型应该有虚拟析构函数,几乎总是。
-
@MooingDuck 谢谢,代码仅用于说明目的
-
如果你想使用一个基类,那么定义一些将在子类中实现的功能。否则,拥有基类是没有意义的。具有具体派生类的抽象基类是多态性的核心,但是多态性意味着利用所有子类中通用的功能(在声明级别而不是实现级别很常见)。
-
唯一的问题是看到是“不起作用”。根据我正在查看的内容,它无法编译。但我感觉你想要更多。请参阅有关多态性和访问者的其他帖子。两者都可以克服你的编译器错误
标签: c++ design-patterns