2012-04-27 12 views

Odpowiedz

16

tak:

MyClass operator* (float x, const MyClass& y) 
{ 
    //... 
} 

MyClass operator* (const MyClass& y, float x) 
{ 
    //... 
} 

Drugi może być również funkcja członek:

class MyClass 
{ 
    //... 
    MyClass operator* (float x); 
}; 

Pierwsze 2 opcje działają jak deklaracje poza zakresem klasy.

+0

Czy operator przeciążony nie jest domyślnie wywoływany za pomocą pierwszego argumentu? Zatem czy ten pierwszy argument jest podstawowym typem danych (tutaj: float), czy to zadziała? – vaisakh

+1

@vaisakh możesz przeciążyć dowolnego operatora dwójkowego, jeśli podasz co najmniej typ zdefiniowany przez użytkownika. W tym przypadku "MyClass" jest zdefiniowany przez użytkownika. Możesz więc zdefiniować 'operator + (int, const MyClass &)' ale nie możesz ponownie zdefiniować 'operator + (int, int)'. –

+0

OK. Nigdy nie próbowałem tego w ten sposób. Dzięki :) – vaisakh

Powiązane problemy