2012-11-10 71 views
3

那麼,WinAPI有一個POINT結構,但我正在嘗試做一個替代類,因此你可以設置值爲xy從構造函數。C++ OOP - 你能'超載演員'< - 很難解釋1句

/** 
* X-Y coordinates 
*/ 
class Point { 
    public: 
    int X, Y; 

    Point(void)   : X(0), Y(0) {} 
    Point(int x, int y) : X(x), Y(y) {} 
    Point(const POINT& pt) : X(pt.x), Y(pt.y) {} 

    Point& operator= (const POINT& other) { 
     X = other.x; 
     Y = other.y; 
    } 
}; 

// I have an assignment operator and copy constructor. 
Point myPtA(3,7); 
Point myPtB(8,5); 

POINT pt; 
pt.x = 9; 
pt.y = 2; 

// I can assign a 'POINT' to a 'Point' 
myPtA = pt; 

// But I also want to be able to assign a 'Point' to a 'POINT' 
pt = myPtB; 

是否有可能超載operator=的方式,這樣我可以指定一個PointPOINT?或者也許有其他方法來實現這一目標?

在此先感謝。

回答

4

這是一個類型轉換操作符的工作:

class Point { 
    public: 
    int X, Y; 

    //... 

    operator POINT() const { 
     POINT pt; 
     pt.x = X; 
     pt.y = Y; 
     return pt; 
    } 
}; 
+0

謝謝您!我其實並不知道有一個轉換操作符。我想這一切都歸結於你不知道的東西,如果這是有道理的); –

+0

你也可以從POINT結構或類派生。這給你隱式轉換POINT&和隱式轉換Point *爲POINT *的能力。 – Yakk

+0

@Yakk提出的是ATL實際上爲'VARIANT'和'BSTR'提供了一個(壞)C++包裝。對於'CComSafeArray',他們使用了一個轉換運算符。 –

4

你可以轉換運算符添加到您的Point類:

class Point { 
    // as before 
    .... 
    operator POINT() const { 
    // build a POINT from this and return it 
    POINT p = {X,Y}; 
    return p; 
    } 
} 
0

使用轉換操作符:

class Point 
{ 
public: 
    operator POINT()const 
    { 
     Point p; 
     //copy data to p 
     return p; 
    } 
};