Mi az üzemeltető túlterhelése?
A C ++ operátor túlterhelésének használatával egy operátor számára egynél több jelentést adhat meg egy hatókörben. Az operátor túlterhelésének célja az operátor speciális jelentésének megadása a felhasználó által definiált adattípus esetében.
Az operátorok túlterhelésével újradefiniálhatja a C ++ operátorok többségét. Az operátor túlterhelésével különböző műveleteket is elvégezhet egy operátor segítségével.
Ebben a C ++ oktatóanyagban megtudhatja:
- Mi az üzemeltető túlterhelése?
- Szintaxis
- A kezelő túlterhelésének különböző megközelítései C ++ nyelven
- Túlterhelhető-e az összes C ++ operátor?
- Dolgok, amikre emlékezni kell:
- A kezelő túlterhelésének szabályai:
- Az üzemeltető túlterhelése:
Szintaxis
A C ++ operátor túlterheléséhez meg kell határoznia egy speciális funkciót az osztályon belül az alábbiak szerint:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Itt van egy magyarázat a fenti szintaxisra:
- A return_type a függvény visszatérési típusa.
- Ezután megemlíti az operátor kulcsszavát.
- A szimbólum a túlterhelt operátor szimbólumot jelöli. Például +, -, <, ++.
- Az argumentum (ok) átadhatók az operátor függvénynek ugyanúgy, mint a függvények.
1. példa:
#includeusing 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;}
Kimenet:
Itt van egy képernyőkép a kódról:
Kód Magyarázat:
- Az iostream fejlécfájl beépítése a kódunkba funkcióinak használatához.
- Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
- Hozzon létre egy TestClass nevű osztályt.
- Használja a privát hozzáférés módosítót, amely egy osztálytagot privátként hozzáférhetőként jelöl meg.
- Hozzon létre egy egész változószámot. Ez a változó magántulajdonban lesz.
- Használja a nyilvános hozzáférés módosítót, amely egy osztálytagot privátként hozzáférhetőként jelöl meg.
- Egy osztály konstruktorral inicializálja a változó számlálót 5-re.
- Túlterhelje a - operátor jelentését.
- Az operátor 1-gyel csökkenti az x változó értékét.
- A kezelő túlterhelés szakaszának vége. Az üzemeltető új nevet kapott.
- A Display () függvény nevű függvény meghatározása.
- A Display () függvény meghívásakor nyomtassa ki a változószám értékét a konzol egyéb szövegei mellé. A} a Display () függvény törzsének a végét jelöli.
- Az osztálytest vége.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni ehhez a függvényhez.
- Hozzon létre egy példányt a TestClass osztályból, és adja meg a tc nevet.
- Ez meghívja a void operator - () függvényt.
- Használja a TestClass Class álláspontját a Display () függvény meghívásához.
- A függvénynek sikeres teljesítéskor vissza kell adnia az értéket.
- A main () függvény törzsének vége.
A kezelő túlterhelésének különböző megközelítései C ++ nyelven
A kezelő túlterhelését a következő típusú funkciók bármelyikének végrehajtásával hajthatja végre:
- Tag funkció
- Tagságon kívüli funkció
- Barát funkció
- Az operátor túlterhelési funkció tagfüggvény lehet, ha a bal operandus az osztály objektuma.
- Ha a bal operandus eltér, az Operátor túlterhelés funkciónak nem tagfüggvénynek kell lennie.
Az operátortúlterhelési funkciót barátnévvé teheti, ha hozzá kell férnie a privát és védett osztálytagokhoz.
Túlterhelhető-e az összes C ++ operátor?
Nem. Vannak C ++ operátorok, amelyeket nem lehet túlterhelni.
Tartalmazzák:
- :: -Scope felbontás operátor
- ?: -ügyintéző.
- . -tagválasztó
- Operátor mérete
- * -tag mutatóválasztó
Dolgok, amikre emlékezni kell:
- Az operátor túlterhelésével újradefiniálhatja az operátor működését csak a felhasználó által definiált típusok (objektumok, struktúrák) esetében. Nem használható beépített típusokhoz (float, char, int stb.).
- Az = és a & C ++ operátorok alapértelmezés szerint túlterheltek. Például ugyanazon osztály objektumait közvetlenül az = operátor segítségével másolhatja.
- Az operátor elsőbbsége nem változtatja meg az operátorok asszociativitását és elsőbbségét. A zárójelek segítségével azonban megváltoztathatja az értékelés sorrendjét.
- Négy operátor létezik, amelyeket nem lehet túlterhelni a C ++ verzióban. Ide tartoznak a hatókör-felbontás operátor (: :), a tagválasztás operátora (.), A tagválasztás egy mutatón keresztül a függvény operátorig (. *) És a ternár operátor (? :).
A kezelő túlterhelésének szabályai:
Az üzemeltető túlterhelésének szabályai:
- Működéséhez legalább egy operandusnak egy felhasználó által definiált osztályobjektumnak kell lennie.
- Csak túlterhelheti a meglévő operátorokat. Nem lehet túlterhelni az új operátorokat.
- Egyes operátorokat nem lehet túlterhelni egy barát funkcióval. Az ilyen operátorok azonban túlterhelhetők a tagfüggvény használatával.
Az üzemeltető túlterhelése:
1. példa:
#includeusing namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}
Kimenet:
Itt van egy képernyőkép a kódról:
Kód Magyarázat:
- Az iostream fejlécfájl beépítése a kódunkba funkcióinak használatához.
- Vegye fel az std névteret programunkba, hogy az osztályait hívás nélkül használhassa.
- Hozzon létre egy OperatorOverload nevű osztályt.
- Használja a privát hozzáférés módosítót, amely egy osztálytagot privátként hozzáférhetőként jelöl meg.
- Hozzon létre egy x egész változót. Ez a változó magántulajdonban lesz.
- Használja a nyilvános hozzáférés módosítót, amely egy osztálytagot privátként hozzáférhetőként jelöl meg.
- Használjon osztály konstruktort az x változó inicializálására 10-re.
- Túlterhelje a ++ operátor jelentését.
- Az operátor 2-vel növeli az x változó értékét.
- A kezelő túlterhelés szakaszának vége. Az üzemeltető új nevet kapott.
- A Print () funkció meghívása.
- Nyomtassa ki az x változó értékét a konzol többi szövegével együtt, amikor a Print () függvény meghívásra kerül.
- A Print () függvény törzsének vége.
- Az osztálytest vége.
- Hívja meg a main () függvényt. A program logikát hozzá kell adni ehhez a függvényhez.
- Hozzon létre egy ov nevű OperatorOverload Class példányt.
- Ez meghívja a void operator ++ () függvényt.
- Az OperatorOverload osztály álláspontjával hívja meg a Print () függvényt.
- A függvénynek sikeres teljesítéskor vissza kell adnia az értéket.
- A main () függvény törzsének vége.
2. példa:
#includeusing 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();}
Kimenet:
Itt van egy képernyőkép a kódról:
Kód Magyarázat:
- Az iostream fejlécfájl beépítése a programunkba annak funkcióinak használata érdekében.
- Vegyük be az std névteret programunkba annak érdekében, hogy az osztályait hívás nélkül használhassuk.
- Hozzon létre egy TestClass nevű osztályt. A {az osztálytest kezdetét jelöli.
- Használja a privát hozzáférés módosítóját a változók privátként való megjelölésére, vagyis csak az osztályon belül érhetők el.
- Határozzon meg két egész számot, valós és több.
- A nyilvános hozzáférés módosítójával jelölje meg a kivitelezőt nyilvánosként, vagyis még az osztályon kívül is elérhető lesz.
- Az osztályszerkesztő létrehozása és a változók inicializálása.
- Inicializálja a valós változó értékét.
- Inicializálja a változó értékét.
- A konstruktortest vége.
- Felülírja a + operátor jelentését.
- Hozza létre a TestClass típusú adattípus eredményt.
- Használja a + operátort összetett számokkal. Ez a sor hozzáadja a szám valós részét egy másik szám valós részéhez.
- Használja a + operátort összetett számokkal. Ez a vonal hozzáadja a szám képzeletbeli részét egy másik szám képzeletbeli részéhez.
- A program a sikeres végrehajtás után visszaadja a változó eredményét.
- A + operátor új jelentésének, vagyis a túlterhelés definíciójának vége.
- Hívja meg a print () metódust.
- A konzolra történő hozzáadás után nyomtassa ki az új komplex számot.
- A törzs () funkció vége.
- A TestClass osztály törzsének vége.
- A main () függvény meghívása.
- A hozzáadandó valós és összetett részek értékeinek átadása. A c1 első része hozzáadódik a c2 első részéhez, vagyis 9 + 4. A c1 második része hozzáadódik a c második részéhez, vagyis 5 + 3.
- Művelet végrehajtása a túlterhelt + operátor használatával és az eredmény tárolása a c3 változóban.
- A c3 változó értékének kinyomtatása a konzolra.
- A fő () függvény törzsének vége.
Összegzés:
- Egy C ++ operátor számára egynél több jelentést adhat meg egy hatókörben.
- Ezt hívjuk operátor túlterhelésnek.
- Az operátor túlterhelése az operátor speciális jelentését adja a felhasználó által definiált adattípushoz.
- A C ++ operátorok többségét újra meghatározhatja az operátor túlterhelésével.
- Nem minden C ++ operátort lehet túlterhelni.
- Az operátor túlterheléséhez legalább az egyik operandusnak egy felhasználó által definiált objektumnak kell lennie.
- Csak a meglévő operátorokat lehet túlterhelni. Nem lehet túlterhelni az új operátorokat.