Mis on operaatori ülekoormus?
Kasutades operaatori ülekoormust C ++ versioonis, saate operaatori jaoks ühes ulatuses määrata rohkem kui ühe tähenduse. Operaatori ülekoormamise eesmärk on anda kasutaja määratletud andmetüübile operaatori eriline tähendus.
Operaatori ülekoormuse abil saate enamuse C ++ operaatoritest uuesti määratleda. Ühe operaatori abil erinevate toimingute tegemiseks võite kasutada ka operaatori ülekoormamist.
Selles C ++ õpetuses saate teada:
- Mis on operaatori ülekoormus?
- Süntaks
- Erinevad lähenemised operaatori ülekoormusele C ++ keeles
- Kas kõiki C ++ operaatoreid saab üle koormata?
- Mida meeles pidada:
- Operaatori ülekoormamise reeglid:
- Operaatori ülekoormamine:
Süntaks
C ++ operaatori ülekoormamiseks peaksite klassi sees määratlema spetsiaalse funktsiooni järgmiselt:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Siin on ülaltoodud süntaksi selgitus:
- Return_type on funktsiooni tagastustüüp.
- Järgmisena mainite operaatori märksõna.
- Sümbol tähistab ülekoormatud operaatori sümbolit. Näiteks +, -, <, ++.
- Argumendi (argumente) saab operaatorifunktsioonile edastada samamoodi nagu funktsioone.
Näide 1:
#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;}
Väljund:
Siin on ekraanipilt koodist:
Koodi selgitus:
- Iostreami päisefaili lisamine meie koodi, et selle funktsioone kasutada.
- Kaasake meie programmi standardne nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega TestClass.
- Kasutage privaatse juurdepääsu modifikaatorit, mis tähistab klassi liiget privaatselt juurdepääsetavaks.
- Loo täisarvu muutujate arv. See muutuja on eraviisiliselt juurdepääsetav.
- Kasutage avaliku juurdepääsu modifikaatorit, mis tähistab klassi liiget privaatselt juurdepääsetavaks.
- Muutujaloenduri lähtestamiseks väärtuseks 5 kasutage klassi konstruktorit.
- - ülekoormage operaatori tähendust.
- Operaator vähendab muutuja x väärtust 1 võrra.
- Operaatori ülekoormamise osa lõpp. Operaatorile on antud uus nimi.
- Funktsiooni Funktsioon Display () määramine.
- Funktsiooni Display () kutsumisel printige muutujate arvu väärtus konsooli muu teksti kõrvale. } Tähistab funktsiooni Display () keha lõppu.
- Klassikeha lõpp.
- Helistage funktsioonile main (). Selle funktsiooni sisse tuleks lisada programmiloogika.
- Looge klassi TestClass eksemplar ja andke talle nimi tc.
- See kutsub funktsiooni void operator - ().
- Funktsiooni Display () kutsumiseks kasutage klassi TestClass hoiakut.
- Funktsioon peab edukal lõpetamisel tagastama väärtuse.
- Funktsiooni main () peaosa lõpp.
Erinevad lähenemised operaatori ülekoormusele C ++ keeles
Operaatori ülekoormamist saate teostada mis tahes järgmist tüüpi funktsioonide abil:
- Liikme funktsioon
- Mitteliikmeline funktsioon
- Sõbra funktsioon
- Operaatori ülekoormusfunktsioon võib olla liikmefunktsioon, kui vasak operand on klassi objekt.
- Kui vasak operand on erinev, peaks operaatori ülekoormusfunktsioon olema mitte-liikme funktsioon.
Operaatori ülekoormamise funktsioonist saate teha sõbrafunktsiooni, kui see vajab juurdepääsu privaatsetele ja kaitstud klassi liikmetele.
Kas kõiki C ++ operaatoreid saab üle koormata?
Ei. On C ++ operaatoreid, mida ei saa üle koormata.
Nad sisaldavad:
- :: -Scope resolutsiooni operaator
- ?: tavaline operaator.
- . -liikme valija
- Operaatori suurus
- * -liikme kursori valija
Mida meeles pidada:
- Operaatori ülekoormuse korral saate uuesti määratleda, kuidas operaator töötab ainult kasutaja määratud tüüpide (objektid, struktuurid) puhul. Te ei saa seda kasutada sisseehitatud tüüpide jaoks (float, char, int jne).
- Operaatorid = ja & C ++ on vaikimisi ülekoormatud. Näiteks saate sama klassi objekte otse operaatori = abil kopeerida.
- Operaatori ülimuslikkus ei muuda operaatorite assotsiatiivsust ja tähtsust. Hindamise järjekorda saate aga muuta sulgude abil.
- Seal on neli operaatorit, mida te ei saa C ++ -s üle koormata. Need hõlmavad ulatuseralduse operaatorit (: :), liikme valikuoperaatorit (.), Liikme valimist kursori kaudu funktsioonioperaatoriks (. *) Ja kolmekordset operaatorit (? :).
Operaatori ülekoormamise reeglid:
Operaatori ülekoormamise reeglid on järgmised:
- Selle toimimiseks peab vähemalt üks operand olema kasutaja määratud klassiobjekt.
- Võite üle koormata ainult olemasolevaid operaatoreid. Te ei saa uusi operaatoreid üle koormata.
- Mõnda operaatorit ei saa sõbrafunktsiooni abil üle koormata. Selliseid operaatoreid saab aga liikmefunktsiooni abil üle koormata.
Operaatori ülekoormamine:
Näide 1:
#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;}
Väljund:
Siin on ekraanipilt koodist:
Koodi selgitus:
- Iostreami päisefaili lisamine meie koodi, et selle funktsioone kasutada.
- Kaasake meie programmi standardne nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega OperatorOverload.
- Kasutage privaatse juurdepääsu modifikaatorit, mis tähistab klassi liiget privaatselt juurdepääsetavaks.
- Loo täisarvu muutuja x. See muutuja on eraviisiliselt juurdepääsetav.
- Kasutage avaliku juurdepääsu modifikaatorit, mis tähistab klassi liiget privaatselt juurdepääsetavaks.
- Muutuja x initsialiseerimiseks 10-ni kasutage klassi konstruktorit.
- ++ operaatori tähenduse ülekoormus.
- Operaator suurendab muutuja x väärtust 2-ga.
- Operaatori ülekoormamise osa lõpp. Operaatorile on antud uus nimi.
- Funktsiooni Print () helistamine.
- Funktsiooni Print () kutsumisel printige muutuja x väärtus konsooli muu teksti kõrvale.
- Funktsiooni Print () sisu lõpp.
- Klassikeha lõpp.
- Helistage funktsioonile main (). Selle funktsiooni sisse tuleks lisada programmiloogika.
- Looge OperatorOverload klassi eksemplar nimega ov.
- See kutsub funktsiooni void operator ++ ().
- Funktsiooni Print () kutsumiseks kasutage klassi OperatorOverload hoiakut.
- Funktsioon peab edukal lõpetamisel tagastama väärtuse.
- Funktsiooni main () peaosa lõpp.
Näide 2:
#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();}
Väljund:
Siin on ekraanipilt koodist:
Koodi selgitus:
- Iostreami päisefaili lisamine meie programmi selle funktsioonide kasutamiseks.
- Kaasake standardne nimeruum meie programmi, et kasutada selle klasse ilma seda kutsumata.
- Looge klass nimega TestClass. {Tähistab klassikeha algust.
- Muutujate privaatseks märkimiseks kasutage privaatse juurdepääsu modifikaatorit, mis tähendab, et neile pääseb juurde ainult klassi sees.
- Määratlege kaks täisarvu muutujat, reaalne ja üle.
- Kasutage avaliku juurdepääsu modifikaatorit, et märkida konstruktor avalikuks, mis tähendab, et sellele pääseb juurde ka väljaspool klassi.
- Klassikonstruktori loomine ja muutujate lähtestamine.
- Initsialiseerige muutuja reaalne väärtus.
- Initsialiseerige muutuja väärtus üle.
- Konstruktori kere ots.
- Alistage operaatori + tähendus.
- Looge tüübi TestClass andmetüübi tulemus.
- Kasutage kompleksarvudega operaatorit +. See rida lisab numbri reaalse osa teise numbri reaalseks osaks.
- Kasutage kompleksarvudega operaatorit +. See rida lisab arvu kujuteldava osa teise numbri kujuteldavale osale.
- Programm tagastab edukal täitmisel muutuja tulemuse väärtuse.
- + Operaatori uue tähenduse ehk ülekoormuse määratluse lõpp.
- Helistage meetodile print ().
- Pärast konsoolile lisamist printige uus kompleksnumber.
- Funktsiooni prindikeha () lõpp.
- TestClass-klassi kere lõpp.
- Funktsiooni main () kutsumine.
- Nii reaalsete kui ka keeruliste lisatavate osade väärtuste edastamine. C1 esimene osa lisatakse c2 esimesele osale, see tähendab 9 + 4. C1 teine osa lisatakse c teisele osale, see tähendab 5 + 3.
- Toimingu sooritamine ülekoormatud + operaatori abil ja tulemuse salvestamine muutujasse c3.
- Muutuja c3 väärtuse printimine konsoolile.
- Põhifunktsiooni () keha lõpp.
Kokkuvõte:
- Ühes ulatuses saate C ++ operaatori jaoks määrata mitu tähendust.
- Seda nimetatakse operaatori ülekoormamiseks.
- Operaatori ülekoormamine annab operaatori jaoks erilise tähenduse kasutaja määratud andmetüübi jaoks.
- Operaatori ülekoormuse abil saate enamiku C ++ operaatoritest uuesti määratleda.
- Kõiki C ++ operaatoreid ei saa üle koormata.
- Operaatori ülekoormamiseks peab vähemalt üks operandidest olema kasutaja määratud objekt.
- Ainult olemasolevaid operaatoreid saab üle koormata. Te ei saa uusi operaatoreid üle koormata.