/ / C ++: héritage et surcharge de l'opérateur - c ++, héritage, surcharge de l'opérateur

C ++: Héritage et surcharge de l'opérateur - c ++, héritage, surcharge d'opérateur

J'ai deux structures:

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;
}
};

Je voudrais compiler ce qui suit:

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

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

Y at-il un moyen de faire ce travail, ou dois-je définir l'opérateur en Ftw ainsi que?

Réponses:

22 pour la réponse № 1

Le problème est que le compilateur crée généralement un operator= pour vous (sauf si vous en fournissez un), et cela operator= cache le hérité. Vous pouvez remplacer ceci en utilisant la déclaration suivante:

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