加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:继承和操作符重载

发布时间:2020-12-16 04:59:16 所属栏目:百科 来源:网络整理
导读:我有两个结构: template typename Tstruct Odp{ T m_t; T operator=(const T rhs) { return m_t = rhs; }};struct Ftw : public Odpint{ bool operator==(const Ftw rhs) { return m_t == rhs.m_t; } }; 我希望以下内容能够编译: int main(){ Odpint odp;
我有两个结构:
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中定义运算符?

解决方法

问题是编译器通常为你创建一个operator =(除非你提供一个),而这个operator =隐藏了继承的一个.您可以通过使用声明来推翻这一点:
struct Ftw : public Odp<int>
{
    using Odp<int>::operator=;
    bool operator==(const Ftw& rhs)
    {
        return m_t == rhs.m_t;
    } 
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读