Przeladowanie operatorów

0

moze zamiast nawijac napisze kawalek kodu:

class jakas_klasa<Key>
{
Key k1, k2;
...
....
if (k1 < k2) rob costam
....
....

no i problem jest taki:
Error 1 Operator '<' cannot be applied to operands of type 'Key' and 'Key'

faktem jest ze typ "Key" jest nieznany wiec trudno liczyc ze kompilator znajdzie dla niego jakis operator, ale mialem zamiar podac tam nazwe klasy z przeladowanym, a tu mi nie wolno tak zrobic... w c++ nie bylo by z tym problemu, ktos mi moze napisac jak to zrobic ?

0

nie za bardzo czaje ten twój kod, ale operatory przeciąża się tak:

public static bool operator<(JakasKlasa left, JakasKlasa right)
{
    if ( costam ) return true;
    else return false;
}
public static JakasKlasa operator+(JakasKlasa left, JakasKlasa right)
{
    JakasKlasa result;
    ( operacje na tym obiekcie )
    return result;
}

operator to słowo kluczowe, po nim podajesz rodzaj operatora.
aha, metoda musi być statyczna.

0

wiem jak sie przeciaza operatory, problem jest w tym ze chce napisac uniwersalny kopiec fibonacciego na ktorym moge wrzucac dowolne klasy, a do tego jest potrzebny
operator porownania przeladowany dla tych klas, z tym ze nie moge go przeladowac dla klasy, ktorej struktury nie bede znal... a kompilator nie pozwala mi skomplilowac kodu gdy jeszcze nie mam operatora dla typu <Key>... nie da sie mu jakos dac do zrozumienia ze operator dla tego typu pojawi sie gdy juz bede wiedzial jakim typem bedzie Key ?

0

Zamiast operatorów skorzystaj z interfejsu IComparable:
class jakas_klasa<Key> where Key : IComparable<Key>
{
Key k1;
Key k2;
...
if(k1.CompareTo(k2) < 0) rob costam
...
}

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