This is better referred to in code. I've got a class known as Vertex that consists of a clear case of a category known as 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;
};

I in addition have a class known as EllParams which comes from Params and EllVertex which comes from Vertex. What I am wondering is how to approach the non-public member variable p in Vertex in EllVertex: I would like it to constitute type EllParams. Can there be a way of creating p virtual/overriding it? Or must i turn to templates for any solution?

Well...you have to initialize the Params in Vertex in some way. So turn it into a parameter around the Vertex constructor. Your EllVertex will pass an EllParams towards the parent constructor from the constructor which is going to be the way the private Vertex.p is initialized.

For instance:

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;
};

Observe that I've transformed your p member variable to some pointer. This way, it's not necessary to make sure that a proper copy constructor is determined for Params or any subclasses.