Optowałbym bardziej za metodą operator int(). Taki operator odpowiada za automatyczną konwersję typu punkt na typ int. Miałoby to sens przy takiej deklaracji:
class punkt
{
unsigned short x, y;
public:
punkt(unsigned int xy) : x(xy >> 16), y(xy & 0x0000ffff)
{
}
punkt(unsigned short x_, unsigned short y_) : x(x_), y(y_)
{
}
// ta metoda zostaje wywołana niejawnie podczas przypisania obiektu punkt do inta
// lub w ogólniejszym przypadku przy próbie interpretacji punkt jako unsigned int
operator unsigned int() const
{
return (static_cast<unsigned int>(x) << 16) & y;
}
};
Rzadko korzysta się z operatorów automatycznej konwersji, częściej tworzy się metody np. getAsInt() etc. Automatyczna konwersja może powodować paskudne błędy, więc lepiej jej nie nadużywać.