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;
}