C ++: переопределение чисто виртуальной переменной-члена? - PullRequest
2 голосов
/ 18 августа 2010

Этот вопрос лучше всего описан в коде. У меня есть класс с именем 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 виртуальным / переопределить его? Или я должен искать шаблоны для решения?

1 Ответ

1 голос
/ 18 августа 2010

Ну ... вам нужно как-то инициализировать 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 или любых подклассов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...