Ainsi, on m'a toujours enseigné qu'une bonne méthode de codage consiste à utiliser des méthodes d'accès plutôt que d'accéder directement aux variables membres. Cependant, lors de l'écriture d'opérateurs surchargés, je ne peux pas compiler. Supposons donc la classe suivante:Pouvez-vous utiliser des méthodes d'accès dans les opérateurs surchargés?
class Point
{
public:
Point() {};
virtual ~Point() {};
// Accessor Methods
inline void SetX(ushort nX) { m_nX = nX; }
inline void SetY(ushort nY) { m_nY = nY; }
inline ushort GetX() { return m_nX; }
inline ushort GetY() { return m_nY; }
// Overloaded Operators
Point operator+(const Point& pnt);
private:
ushort m_nX, m_nY;
};
Dans la définition de l'opérateur, ce qui suit semble parfaitement légal, mais il va à l'encontre de ce que j'ai enseigné:
Point Point::operator+(const Point& pnt)
{
Point myPoint;
myPoint.SetX(GetX() + pnt.m_nX);
myPoint.SetY(GetY() + pnt.m_nY);
return myPoint;
}
Cependant, ce qui suit compile avec l'erreur :
Point.cpp:7:36: error: passing 'const Point {aka const Point}' as 'this' argument of 'ushort Point::GetX()' discards qualifiers [-fpermissive]
Point.cpp:8:36: error: passing 'const Point {aka const Point}' as 'this' argument of 'ushort Point::GetY()' discards qualifiers [-fpermissive]
Point Point::operator+(const Point& pnt)
{
Point myPoint;
myPoint.SetX(GetX() + pnt.GetX()); // Here I am trying to use accessor methods vs. member variables
myPoint.SetY(GetY() + pnt.GetY());
return myPoint;
}
le dernier code compilera si le mot clé 'const' est retiré du para liste de compteur, que je ne comprends pas complètement, juste parce que je passe dans une variable const, pourquoi cela élimine-t-il ma capacité à utiliser les méthodes accesseur?
Votre membre 'operator +' devrait également être qualifié '' const''. Vous ne modifiez pas cet argument. – pmr