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; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |