这个问题最好在代码中描述。我有一个名为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
。我想知道的是如何处理p
中Vertex
中的私有成员变量EllVertex
:我希望它属于EllParams
类型。是否有某种方法可以使p
虚拟/覆盖它?或者我应该寻找解决方案的模板?
答案 0 :(得分:1)
嗯......你需要以某种方式初始化Params
中的Vertex
。所以在Vertex
构造函数上创建一个参数。然后,您的EllVertex
会将EllParams
从其构造函数传递给父构造函数,这将是私有Vertex.p
的初始化方式。
例如:
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;
protected:
Vertex(Params* inputParams) : p(inputParams) {}
private:
Params* const p;
};
请注意,我已将p
成员变量更改为指针。这样,您不必确保为Params
或任何子类定义了正确的复制构造函数。