overloadable operator
Megjelenés
Főnév
overloadable operator (tsz. overloadable operators)
- (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 |
- overloadable operator - Szótár.net (en-hu)
- overloadable operator - Sztaki (en-hu)
- overloadable operator - Merriam–Webster
- overloadable operator - Cambridge
- overloadable operator - WordNet
- overloadable operator - Яндекс (en-ru)
- overloadable operator - Google (en-hu)
- overloadable operator - Wikidata
- overloadable operator - Wikipédia (angol)