C ++:继承和运算符重载

时间:2010-08-04 23:34:51

标签: c++ inheritance operator-overloading

我有两个结构:

template <typename T>
struct Odp
{
    T m_t;

    T operator=(const T rhs)
    {
        return m_t = rhs;
    }
};

struct Ftw : public Odp<int>
{
    bool operator==(const Ftw& rhs)
    {
        return m_t == rhs.m_t;
    } 
};

我想要编译以下内容:

int main()
{
    Odp<int> odp;
    odp = 2;

    Ftw f;
    f = 2; // C2679: no operator could be found
}

有没有办法使这项工作,或者我必须在Ftw中定义运算符?

1 个答案:

答案 0 :(得分:22)

问题是编译器通常会为您创建operator=(除非您提供一个),并且此operator=隐藏了继承的struct Ftw : public Odp<int> { using Odp<int>::operator=; bool operator==(const Ftw& rhs) { return m_t == rhs.m_t; } }; 。您可以使用声明来否决它:

{{1}}