C++ Operator Näidetega ülekoormamine
Mis on Operakas ülekoormus?
Kasutamine operaatori ülekoormus in C++, saate ühes ulatuses määrata operaatorile rohkem kui ühe tähenduse. Operaatori ülekoormuse eesmärk on anda kasutaja määratud andmetüübile operaatori eriline tähendus.
Operaatori ülekoormamise abil saate enamiku uuesti määratleda C++ operaatorid. Operaatori ülekoormust saate kasutada ka erinevate toimingute tegemiseks ühe operaatori abil.
Süntaks
Ülekoormamiseks a C++ operaator, peaksite klassi sees defineerima spetsiaalse funktsiooni järgmiselt:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Siin on ülaltoodud süntaksi selgitus:
- Tagastustüüp on funktsiooni tagastamise tüüp.
- Järgmisena mainite operaatori märksõna.
- Sümbol tähistab operaatori sümbolit, mis on ülekoormatud. Näiteks +, -, <, ++.
- Argumendi(d) saab operaatorifunktsioonile edastada samamoodi nagu funktsioone.
Näiteks 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; }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostream päisefail.
- Lisage meie programmi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega TestClass.
- Kasutage privaatjuurdepääsu muutjat, mis märgib klassi liikme privaatselt juurdepääsetavaks.
- Looge täisarvuline muutujate arv. See muutuja on privaatselt juurdepääsetav.
- Kasutage avaliku juurdepääsu muutjat, mis märgib klassi liikme privaatselt juurdepääsetavaks.
- Kasutage klassikonstruktorit, et lähtestada muutuja loendur väärtuseks 5.
- Liigutage operaatori — tähendust.
- Operaator vähendab muutuja x väärtust 1 võrra.
- Operaatori ülekoormussektsiooni lõpp. Operaator on saanud uue nime.
- Funktsiooni Display()-nimelise funktsiooni määratlemine.
- Funktsiooni Display() kutsumisel printige muutuja count väärtus koos muu konsooli tekstiga. } tähistab funktsiooni Display() põhiosa lõppu.
- Klassi keha lõpp.
- Kutsuge välja funktsioon main(). Selle funktsiooni sisse tuleks lisada programmiloogika.
- Looge klassist TestClass eksemplar ja andke sellele nimi tc.
- See kutsub esile tühiste operaatori –() funktsiooni.
- Funktsiooni Display() kutsumiseks kasutage TestClass Classi seisukohta.
- Funktsioon peab pärast edukat lõpetamist tagastama väärtuse.
- Funktsiooni main() keha lõpp.
Erinevad lähenemised Operator Ülekoormus sisse C++
Operaatori ülekoormamist saate teostada, rakendades mis tahes järgmist tüüpi funktsioone:
- Liikme funktsioon
- Mitteliikme funktsioon
- Sõbra funktsioon
- Operaatori ülekoormusfunktsioon võib olla liigefunktsioon, kui vasak operand on klassi objekt.
- Kui vasak operand on erinev, siis OperaÜlekoormusfunktsioon peaks olema mitteliikmefunktsioon.
Saate muuta operaatori ülekoormusfunktsiooni sõbrafunktsiooniks, kui see vajab juurdepääsu privaatsetele ja kaitstud klassi liikmetele.
Saab kõik C++ Operators on ülekoormatud?
Ei. Neid on C++ operaatorid, mida ei saa üle koormata.
Nende hulka kuuluvad:
- :: -Scope resolutsiooni operaator
- ?: -kolmne operaator.
- . -liikme valija
- Operaatori suurus
- * -liikme osuti valija
Asjad, mida meeles pidada
- Operaatori ülekoormusega saate operaatori tööviisi ümber määratleda ainult kasutaja määratud tüüpide (objektid, struktuurid) jaoks. Te ei saa seda kasutada sisseehitatud tüüpide jaoks (float, char, int jne).
- = ja & C++ operaatorid on vaikimisi ülekoormatud. Näiteks saate sama klassi objekte otse kopeerida, kasutades operaatorit =.
- Operatori ülimuslikkus ei muuda operaatorite assotsiatiivset ja prioriteetsust. Hindamise järjekorda saate aga muuta sulgudes.
- Seal on neli operaatorit, mida te ei saa üle koormata C++. Nende hulka kuuluvad ulatuse lahutusoperaator (::), liikmevaliku operaator (.), liikmete valik funktsioonioperaatori osuti kaudu (.*) ja kolmekomponentne operaator (?:).
Reeglid Operator Ülekoormus
Siin on reeglid Operator ülekoormamine:
- Et see toimiks, peab vähemalt üks operaand olema kasutaja määratud klassiobjekt.
- Saate ainult olemasolevaid operaatoreid üle koormata. Te ei saa uusi operaatoreid üle koormata.
- Mõnda operaatorit ei saa sõbrafunktsiooni kasutades üle koormata. Selliseid operaatoreid saab liikmefunktsiooni kasutades aga üle koormata.
Kuidas üle koormata Operator
Näiteks 1
#include <iostream> using 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; }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Selle funktsioonide kasutamiseks lisage meie koodi iostream päisefail.
- Lisage meie programmi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega OperatOverload.
- Kasutage privaatjuurdepääsu muutjat, mis märgib klassi liikme privaatselt juurdepääsetavaks.
- Looge täisarvuline muutuja x. See muutuja on privaatselt juurdepääsetav.
- Kasutage avaliku juurdepääsu muutjat, mis märgib klassi liikme privaatselt juurdepääsetavaks.
- Muutuja x lähtestamiseks 10-ks kasutage klassikonstruktorit.
- Liigutage operaatori ++ tähendust.
- Operaator suurendab muutuja x väärtust 2-ga.
- Operaatori ülekoormussektsiooni lõpp. Operaator on saanud uue nime.
- Funktsiooni Print() kutsumine.
- Funktsiooni Print() kutsumisel printige muutuja x väärtus koos muu konsooli tekstiga.
- Funktsiooni Print() keha lõpp.
- Klassi keha lõpp.
- Kutsuge välja funktsioon main(). Selle funktsiooni sisse tuleks lisada programmiloogika.
- Loo eksemplar OperatorOverload Klass nimega ov.
- See kutsub esile tühiste operaatori ++() funktsiooni.
- Kasutage seisukohta OperatorOverload klassi funktsiooni Print() kutsumiseks.
- Funktsioon peab pärast edukat lõpetamist tagastama väärtuse.
- Funktsiooni main() keha lõpp.
Näiteks 2
#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(); }
Väljund:
Siin on koodi ekraanipilt:
Koodi selgitus:
- Iostreami päisefaili lisamine meie programmi selle funktsioonide kasutamiseks.
- Kaasake std nimeruum meie programmi, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega TestClass. { tähistab klassi keha algust.
- Kasutage privaatse juurdepääsu modifikaatorit muutujate privaatseks märkimiseks, mis tähendab, et neile pääseb juurde ainult klassi seest.
- Määratlege kaks täisarvu muutujat, reaalne ja üle.
- Kasutage avaliku juurdepääsu muutjat, et märkida konstruktor avalikuks, mis tähendab, et see on juurdepääsetav isegi väljaspool klassi.
- Klassi konstruktori loomine ja lähtestamine muutujad.
- Initsialiseerige muutuja real väärtus.
- Initsialiseerige muutuja väärtus over.
- Konstruktori korpuse lõpp.
- Alistage operaatori + tähendus.
- Looge andmetüübi tulemus tüübiga TestClass.
- Kasutage kompleksarvude puhul operaatorit +. See rida lisab arvu reaalosa teise arvu reaalosale.
- Kasutage kompleksarvude puhul operaatorit +. See rida lisab arvu mõttelise osa teise arvu imaginaarsele osale.
- Programm tagastab edukal täitmisel muutuja tulemuse väärtuse.
- Operaatori + uue tähenduse ehk ülekoormamise definitsiooni lõpp.
- Kutsuge print() meetodit.
- Printige uus kompleksarv pärast lisamist konsoolil.
- Funktsiooni print() kehaosa lõpp.
- TestClassi klassi põhiosa lõpp.
- Funktsiooni main() kutsumine.
- Nii reaal- kui ka kompleksosa väärtuste läbimine, mida lisada. C1 esimene osa lisatakse c2 esimesele osale, see tähendab 9+4. C1 teine osa lisatakse c teisele osale, see tähendab 5+3.
- Tehte sooritamine operaatoriga overloaded + ja tulemuse salvestamine muutujasse c3.
- Muutuja c3 väärtuse trükkimine konsoolile.
- Funktsiooni main() keha lõpp.
kokkuvõte
- Saate määrata a jaoks rohkem kui ühe tähenduse C++ operaator ühes ulatuses.
- Seda nimetatakse operaatori ülekoormamiseks.
- Operator overloading annab kasutaja määratud andmetüübi puhul operaatori erilise tähenduse.
- Saate enamuse uuesti määratleda C++ operaatorid operaatori ülekoormuse tõttu.
- Mitte kõik C++ operaatorid võivad olla ülekoormatud.
- Operaatori ülekoormamiseks peab vähemalt üks operandidest olema kasutaja määratud objekt.
- Ülekoormatud võivad olla ainult olemasolevad operaatorid. Te ei saa uusi operaatoreid üle koormata.