Operacje konwersji

0

Mam problem ze zrozumieniem działania poniższego fragmentu kodu.

class punkt
{
int x, y;
public:
punkt (int xx=0, yy=0)
{
x = xx; y = yy;
}
// ….
};

Deklaracje.

punkt p;
int n;
void fun (int);

I w takim wypadku co robią poniższe instrukcje?

n = p; //instrukcja 1
fun (p); //instrukcja 2
0

Przypuszczalnie w klasie masz też operator= konwertujący punkt na int.

0

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ć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1