C ++:重写纯虚拟成员变量?

时间:2010-08-18 17:35:02

标签: c++ templates inheritance oop virtual

这个问题最好在代码中描述。我有一个名为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的课程,该课程源自ParamsEllVertex,派生自Vertex。我想知道的是如何处理pVertex中的私有成员变量EllVertex:我希望它属于EllParams类型。是否有某种方法可以使p虚拟/覆盖它?或者我应该寻找解决方案的模板?

1 个答案:

答案 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或任何子类定义了正确的复制构造函数。