Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

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:

C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden

Hier is een screenshot van de code:

C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden

Code‑uitleg:

  1. Include <iostream> voor I/O‑faciliteiten.
  2. Gebruik de std-naamruimte voor beknoptheid.
  3. Definieer een klasse TestClass.
  4. Maak count een private data‑member.
  5. Voorzie een public constructor die count initialiseert op 5.
  6. Overload de prefix -- operator om 3 af te trekken van count.
  7. Implementeer Display() om de huidige waarde te printen.
  8. 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:

  1. Member‑functies
  2. Non‑member functies (friend of vrije functies)
  3. 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 access
  • sizeof – grootte‑opvraging
  • * (member pointer selector)

Dingen om te Onthouden

  1. Overloading beïnvloedt alleen user‑defined types; built‑in types behouden hun originele gedrag.
  2. De toewijzing (=) en address‑of (&) operators worden automatisch overloaded voor klassen die copy constructors of assignment operators voorzien.
  3. Operator precedentie blijft ongewijzigd; je kunt haakjes gebruiken om evaluatievolgorde af te dwingen.
  4. 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:

C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden

Screenshot van de code:

C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden

Code‑uitleg:

  1. Include <iostream> en gebruik de std-naamruimte.
  2. Definieer klasse OperatorOverload met private int x.
  3. Constructor initialiseert x op 10.
  4. Overload de prefix ++ operator om 2 toe te voegen aan x.
  5. Implementeer Print() om de bijgewerkte waarde te tonen.
  6. 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:

C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden

Screenshot van de code:

C++ Operator Overloading – Praktische Handleiding met Code‑Voorbeelden

Code‑uitleg:

  1. Include <iostream> en gebruik de std-naamruimte.
  2. Definieer TestClass met real en over componenten.
  3. Voorzie een constructor voor initialisatie.
  4. Overload de + operator om complex‑getal‑optelling uit te voeren.
  5. Retourneer een nieuwe TestClass‑instantie met de som.
  6. Implementeer print() om het complexe getal te tonen.
  7. 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

  1. Arrays doorgeven aan functies in C++: een praktische gids
  2. C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
  3. C++ do‑while Lus: Syntaxis, Praktische Voorbeelden en Geneste Lussen
  4. C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
  5. C++ Char Datatype: Declaratie, ASCII en Conversie‑Technieken
  6. C++ Structs Uitgelegd met een Praktisch Voorbeeld
  7. Beheersen van std::list in C++: Syntaxis, Functies & Praktische Voorbeelden
  8. C++ Functies Uitgelegd met Praktische Codevoorbeelden
  9. Operator overloading in Python beheersen: een praktische gids
  10. Python lambda-functies beheersen: praktische voorbeelden & best practices
  11. Python round()-functie uitgelegd met praktische voorbeelden