Ugrás a tartalomhoz

overloadable operator

A Wikiszótárból, a nyitott szótárból


Főnév

overloadable operator (tsz. overloadable operators)

  1. (informatika) A C++ overloadable operator (túlterhelhető operátor) kifejezés azokat az operátorokat jelenti, amelyeket újra lehet definiálni saját osztályainkhoz, hogy azok az operátorokat egyedi módon értelmezzék. Az operátorok túlterhelése egy formája a polimorfizmusnak és lehetővé teszi, hogy objektumokat úgy használjunk, mintha beépített típusok lennének.



🧠 Mi az az operátor túlterhelés?

A C++ lehetőséget biztosít arra, hogy saját típusokhoz – például osztályokhoz – új jelentést adjunk a szokásos operátoroknak:

Complex a(1, 2), b(3, 4);
Complex c = a + b;  // működik, ha az + operátor túl van terhelve

📦 Túlterhelhető operátorok

C++-ban szinte minden operátor túlterhelhető, kivéve néhány kivételt.

✅ Túlterhelhető operátorok

Kategória Operátorok
Aritmetikai +, -, *, /, %
Összehasonlító ==, !=, <, <=, >, >=
Logikai !, &&, ` `
Bitművelet &, ` ,^,~,<<,>>`
Értékadó =, +=, -=, *=, /=, %= stb.
Indexelés []
Hívás ()
Mutató *, ->, ->*
Inkrementálás ++, --
Bemenet/kimenet <<, >>
Egyéb new, delete, new[], delete[]



Nem túlterhelhető operátorok

Operátor Miért nem túlterhelhető?
. Taghozzáférés
.* Tagmutató elérés
:: Terület (névtér/osztály) operátor
?: Ternáris operátor
sizeof Fordításkori művelet
typeid Fordítás/futásidő típus lekérdezés
alignof, noexcept C++11+ kulcsszavak



🧱 Operátor túlterhelés szintaxisa

Tagfüggvényként (class belül):

class Vec {
public:
    int x, y;
    Vec(int x, int y): x(x), y(y) {}

    Vec operator+(const Vec& rhs) const {
        return Vec(x + rhs.x, y + rhs.y);
    }
};

Külső barátfüggvényként:

class Vec {
    int x, y;
public:
    Vec(int x, int y): x(x), y(y) {}
    friend Vec operator+(const Vec& a, const Vec& b);
};

Vec operator+(const Vec& a, const Vec& b) {
    return Vec(a.x + b.x, a.y + b.y);
}

🧪 Példák

Összeadás operátor +

Complex operator+(const Complex& other) const;

Indexelő []

T& operator[](int index);

Függvényhívás ()

double operator()(double x) const;

Bemenet/kimenet

friend std::ostream& operator<<(std::ostream& os, const MyClass& obj);
friend std::istream& operator>>(std::istream& is, MyClass& obj);

⚠️ Fontos szabályok

Szabály Magyarázat
Nem hozhatunk létre új operátort Csak meglévő operátorokat lehet túlterhelni
Értelmes viselkedést kell adni Ne írjuk felül a jelentést indokolatlanul
Kommutativitás csak barátfüggvénnyel érhető el a + b és b + a akkor működik, ha a baloldali nem osztály
=, [], (), -> csak tagfüggvény lehet Ezeket nem lehet globálisan megírni
new, delete lehet globális vagy tagfüggvény



🧾 Túlterhelés és sablonok

template <typename T>
T operator+(const Matrix<T>& a, const Matrix<T>& b);

✅ Összefoglalás

Tulajdonság Részlet
Cél Objektumok beépített típus módjára való kezelése
Működés operatorX függvény formájában
Hely Osztályban tagként vagy kívül barátként
Jellemzők Lehet const, lehet friend, visszatérhet referencia is
Előny Intuitív, természetes szintaxis, újrafelhasználhatóság
Hátrány Túlhasználat megnehezítheti az olvashatóságot