所以我總是被教導,好的編碼習慣是使用訪問器方法而不是直接訪問成員變量,但是在編寫重載操作符時,如果在操作符類定義中使用這些訪問器方法,我將無法編譯。因此,假設下面的類:您可以在重載操作符中使用訪問器方法嗎?
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;
};
在運營商定義,下列似乎完全合法的,但它違背了教什麼我:
Point Point::operator+(const Point& pnt)
{
Point myPoint;
myPoint.SetX(GetX() + pnt.m_nX);
myPoint.SetY(GetY() + pnt.m_nY);
return myPoint;
}
然而,在與錯誤編譯:
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;
}
如果「const的」關鍵字從對除去後者代碼將編譯米表,我不完全理解,只是因爲我傳遞了一個const變量,爲什麼這會消除我使用訪問器方法的能力?
您的成員'operator +'也應該是'const'限定的。你沒有修改這個論點。 – pmr 2012-02-09 20:59:18