Operator (programiranje)

Izvor: Hrvatska internetska enciklopedija
Skoči na:orijentacija, traži

U računalnom programiranju, operator je računalni konstrukt definiran unutar programskog jezika, koji se ponaša poput funkcije, ali se razlikuje sintaksom.

Operatori se razlikuju prema broju operanada koje primaju i prema tipu podatka koji vraćaju kao rezultat.

Unarni operatori

Unarni operatori primaju jedan operand. To su:

  • logički NE (NOT) - vrši logičku negaciju nad boolean varijablom
  • inkrement (++) - vrši operaciju uvećanja broja za jedan
  • dekrement (--) - vrši operaciju umanjenja broja za jedan
  • adresni operator (&) - vraća memorijsku adresu varijable

Binarni operatori

Binarni operatori primaju dva operanda. To su:

  • logički ILI (OR) - vraća istinu ako je ijedan operand istinit
  • logički I (AND) - vraća istinu ako su oba operanda istinita
  • operatori usporedbe (manje (ili jednako) od, veće (ili jednako) od, jednako, različito) - vraćaju boolean rezultat
  • aritmetički zbroj (+)
  • aritmetička razlika (-)
  • aritmetički umnožak (*)
  • aritmetički količnik (/)
  • aritmetički modulo (%) - vraća cjelobrojni ostatak pri dijeljenju
  • operator pridruživanja (=)
  • operator obnavljajućeg pridruživanja - omogućuje kraći zapis aritmetičkih operacija (a=a+5 -> a+=5)

Ternarni operatori

  • kondicionalni operator (ponekad ternarni operator) (?:) - operator predikatne logike (uvjet ? ako je istina : ako je laž)

Preopterećenje operatora

Neki objektno orijentirani programski jezici dopuštaju dodavanje funkcija klasama kako bi se definiralo ponašanje operatora u ne-standardnim uvjetima. Primjer je uporaba operatora + na tipu string u svrhe konkatenacije ('ab' + 'cd'='abcd'). Programski jezik C++ zadano dopušta uoprabu operatora + na stringu.

Kod niže pisan u C++-u definira klasu Kompleksni i razne preopterećene operatore:

class Kompleksni{
    public:
        double re, im; //kompleksni broj sadrži realni i imaginarni dio
    Kompleksni(){}
    Kompleksni(double x, double y) : re(x), im(y) {} //preopterećenje konstruktora
    Kompleksni operator +(double re); // preopterećenje: kompleksni + double (ali ne obrnuto)
};
//članska funkcija (deklarirana iznad) - dopušta kompleksni + double ALI NE obrnuto
Kompleksni Kompleksni::operator +(double re){
    return Kompleksni(this->re + re, im);
}

//preopterećenje: ne-članska funkcija - dopušta double + kompleksni
Kompleksni operator +(double re, Kompleksni Z){
    return Z + re; // već definirano članskom operatorskom funkcijom
}

// preopterećenje prefiks operatora ++ (++i)
Kompleksni& Kompleksni::operator ++(){
    ++re;
    ++im;
    return *this;
}
// preopterećenje sufiks operatora ++ (i++)
Kompleksni Kompleksni::operator ++(int){
    Kompleksni Pom = *this;
    re++;
    im++;
    return Pom;
}

// preopterećenje operatora za unos kompleksnog broja
istream& operator >>(istream& ulaz, Kompleksni& Z){
    ulaz >> Z.re >> Z.im;
    return ulaz;
}
// preopterećenje operatora za ispis kompleksnog broja
ostream& operator <<(ostream& izlaz, Kompleksni Z){
    izlaz << Z.re << " + " << Z.im << "i";
    return izlaz;
}

Izvori