Как наследовать методы, возвращающие ссылку на текущий объект? - PullRequest
0 голосов
/ 29 мая 2020

Есть базовый класс

class LineEditItem
{
public:
    LineEditItem(QLineEdit* le, const Values_t& values = Values_t()):
        values(values),
        le(le)
    {}
    LineEditItem &addValue(int v, const QString &s)
    {
        values[v] = s;
        return *this;
    }
    LineEditItem &addValues(const Values_t& vals)
    {
        for (auto key: vals.keys())
        {
            values[key] = vals[key];
        }
        return *this;
    }
    void setValue(uint32_t v)
    {
        QString str;
        if (values.contains(v))
        {
            str = values[v];
        }
        else
        {
            str = "";
        }
        le->setText(str);
    }
    void clearValue()
    {
        le->clear();
    }

protected:
    Values_t values;
    QLineEdit* le;
};

Есть дочерний класс, который должен наследовать методы addValue и addValues ​​

class LineEditItemBits: public LineEditItem
{
public:
    LineEditItemBits(QLineEdit* le, int begin, int end, const Values_t& values = Values_t()):
        LineEditItem(le, values),
        begin(begin),
        end(end)
    {}
    void setValue(uint32_t v)
    {
        int s = end - begin + 1;
        v = (v >> begin) & ((1 << s) - 1);
        LineEditItem::setValue(v);
    }
    LineEditItemBits &addValue(int v, const QString &s)
    {
        LineEditItem::addValue(v, s);
        return *this;
    }
    LineEditItemBits &addValues(const Values_t& vals)
    {
        LineEditItem::addValues(vals);
        return *this;
    }
private:
    int begin;
    int end;
};

Но вы должны явно прописать эти методы и вызвать базу методы класса из них. Как унаследовать эти методы от базового класса, чтобы они возвращали ссылку на дочерний класс?

1 Ответ

0 голосов
/ 29 мая 2020

Насколько я понимаю, вы пытаетесь переопределить эти функции, поэтому вы должны сделать их virtual в родительском классе.

...