C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden
Wat is Operator Overloading?
Met operator overloading in C++ kun je meerdere betekenissen toewijzen aan een operator binnen dezelfde scope. Het doel is om een aangepast gedrag aan een operator te geven voor een user‑defined type.
Met operator overloading kun je de meeste C++ operators herdefiniëren en verschillende operaties uitvoeren met een enkel symbool.
In deze tutorial leer je:
- Wat operator overloading is
- Syntaxis
- Verschillende benaderingen om operators te overloaden in C++
- Welke operators niet overloaded kunnen worden
- Belangrijke overwegingen
- Regels voor operator overloading
- Hoe een operator in de praktijk te overloaden
Syntaxis
Om een C++ operator te overloaden, definieer een speciale member‑functie binnen een klasse als volgt:
class class_name { ... public: return_type operator symbol (argument(s)) { ... } ... };
De componenten zijn:
- return_type – het type dat de operator‑functie retourneert.
- operator – het keyword dat de declaratie start.
- symbol – de operator die je wilt overloaden, bv.
+,-,<,++. - argument(s) – parameters, net als elke andere functie.
Voorbeeld 1:
#include <iostream>
using namespace std;
class TestClass {
private:
int count;
public:
TestClass() : count(5) {}
void operator --() {
count = count - 3;
}
void Display() {
cout << "Count: " << count;
}
};
int main() {
TestClass tc;
--tc;
tc.Display();
return 0;
}
Output:

Hier is een screenshot van de code:

Code‑uitleg:
- Include
<iostream>voor I/O‑faciliteiten. - Gebruik de
std-naamruimte voor beknoptheid. - Definieer een klasse
TestClass. - Maak
counteen private data‑member. - Voorzie een public constructor die
countinitialiseert op 5. - Overload de prefix
--operator om 3 af te trekken vancount. - Implementeer
Display()om de huidige waarde te printen. - In
main(), creëer een instantie, pas de overloaded operator toe, en toon het resultaat.
Verschillende Benaderingen voor Operator Overloading in C++
Overloading kan bereikt worden via:
- Member‑functies
- Non‑member functies (friend of vrije functies)
- Friend‑functies (wanneer toegang tot private data nodig is)
- Als de linker operand een object van de klasse is, wordt typisch een member‑functie gebruikt.
- Wanneer de linker operand van een ander type is, is een non‑member functie vereist.
- Friend‑functies zijn nuttig wanneer de operator toegang nodig heeft tot private of protected members.
Kunnen Alle C++ Operators Overloaded Worden?
Nee. De volgende operators zijn niet overloadable:
::– scope resolution?:– ternaire conditionele.– member accesssizeof– grootte‑opvraging*(member pointer selector)
Dingen om te Onthouden
- Overloading beïnvloedt alleen user‑defined types; built‑in types behouden hun originele gedrag.
- De toewijzing (
=) en address‑of (&) operators worden automatisch overloaded voor klassen die copy constructors of assignment operators voorzien. - Operator precedentie blijft ongewijzigd; je kunt haakjes gebruiken om evaluatievolgorde af te dwingen.
- Drie operators—
::,.,?:—zijn expliciet verboden om te overloaden.
Regels voor Operator Overloading
- Minimaal één operand moet een user‑defined class type zijn.
- Alleen bestaande operators kunnen overloaded worden; je kunt geen nieuwe operator‑symbolen introduceren.
- Sommige operators (bijv.
new,delete) kunnen niet als friend‑functies overloaded worden, maar wel als member‑functies.
Hoe een Operator te Overloaden
Voorbeeld 1: Increment Operator
#include <iostream>
using namespace std;
class OperatorOverload {
private:
int x;
public:
OperatorOverload() : x(10) {}
void operator ++() {
x += 2;
}
void Print() {
cout << "The Count is: " << x;
}
};
int main() {
OperatorOverload ov;
++ov;
ov.Print();
return 0;
}
Output:

Screenshot van de code:

Code‑uitleg:
- Include
<iostream>en gebruik destd-naamruimte. - Definieer klasse
OperatorOverloadmet privateint x. - Constructor initialiseert
xop 10. - Overload de prefix
++operator om 2 toe te voegen aanx. - Implementeer
Print()om de bijgewerkte waarde te tonen. - In
main(), creëer een object, roep de overloaded operator aan, en print het resultaat.
Voorbeeld 2: Complex Getal Optelling
#include <iostream>
using namespace std;
class TestClass {
private:
int real, over;
public:
TestClass(int rl = 0, int ov = 0) : real(rl), over(ov) {}
TestClass operator + (TestClass const &obj) {
TestClass result;
result.real = real + obj.real;
result.over = over + obj.over;
return result;
}
void print() {
cout << real << " + i" << over << endl;
}
};
int main() {
TestClass c1(9, 5), c2(4, 3);
TestClass c3 = c1 + c2;
c3.print();
}
Output:

Screenshot van de code:

Code‑uitleg:
- Include
<iostream>en gebruik destd-naamruimte. - Definieer
TestClassmetrealenovercomponenten. - Voorzie een constructor voor initialisatie.
- Overload de
+operator om complex‑getal‑optelling uit te voeren. - Retourneer een nieuwe
TestClass‑instantie met de som. - Implementeer
print()om het complexe getal te tonen. - In
main(), creëer twee instanties, tel ze op, en print het resultaat.
Samenvatting
- Operator overloading stelt meerdere betekenissen voor een operator binnen een scope toe.
- Het biedt aangepast gedrag voor user‑defined types.
- De meeste C++ operators kunnen overloaded worden, maar een paar niet.
- Minimaal één operand moet een user‑defined type zijn.
- Alleen bestaande operators zijn overloadable.
C Taal
- Arrays doorgeven aan functies in C++: een praktische gids
- C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
- C++ do‑while Lus: Syntaxis, Praktische Voorbeelden en Geneste Lussen
- C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
- C++ Char Datatype: Declaratie, ASCII en Conversie‑Technieken
- C++ Structs Uitgelegd met een Praktisch Voorbeeld
- Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
- C++ Functies Uitgelegd met Praktische Codevoorbeelden
- Operator overloading in Python beheersen: een praktische gids
- Python lambda-functies beheersen: praktische voorbeelden & best practices
- Python round()-functie uitgelegd met praktische voorbeelden