【发布时间】:2011-03-31 16:52:17
【问题描述】:
这个问题最好用代码来描述。我有一个名为Vertex 的类,其中包含一个名为Params 的类的实例:
class Params {
virtual Params operator + (Params const& p) = 0;
};
class Vertex {
public:
Params operator + (Params const& ap) const {
return p + ap
};
virtual float eval() = 0;
private:
Params const p;
};
我还有一个名为 EllParams 的类,它派生自 Params 和 EllVertex,它派生自 Vertex。我想知道的是如何在Vertex 中处理EllVertex 中的私有成员变量p:我希望它是EllParams 类型。有没有办法让p 虚拟/覆盖它?还是我应该寻找解决方案的模板?
【问题讨论】:
-
无法将数据成员设为“虚拟”。我会尽量避免继承树的非叶类中的数据成员;如果您需要从基类访问数据成员,则创建一个可以在派生类中实现的虚函数。
-
您正在尝试使用抽象类型的数据成员。那是行不通的。改用指针(您可能想要使用智能指针)。这样,虚拟行为就会起作用。
标签: c++ templates inheritance oop virtual