C++ Operator Ylikuormitus esimerkeillä
Mikä on Operatai ylikuormitus?
Käyttäminen käyttäjän ylikuormitus in C++, voit määrittää useamman kuin yhden merkityksen operaattorille yhdessä laajuudessa. Operaattorin ylikuormituksen tarkoituksena on tarjota operaattorille erityinen merkitys käyttäjän määrittämälle tietotyypille.
Käyttäjän ylikuormituksen avulla voit määrittää uudelleen suurimman osan C++ operaattorit. Voit myös käyttää operaattorin ylikuormitusta eri toimintojen suorittamiseen yhdellä operaattorilla.
Syntaksi
Ylikuormittaaksesi a C++ -operaattoria, sinun tulee määrittää luokan sisällä erityinen funktio seuraavasti:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Tässä on selitys yllä olevalle syntaksille:
- Palautustyyppi on funktion palautustyyppi.
- Seuraavaksi mainitset operaattorin avainsanan.
- Symboli tarkoittaa ylikuormitettua käyttäjäsymbolia. Esimerkiksi +, -, <, ++.
- Argumentti(t) voidaan välittää operaattorifunktiolle samalla tavalla kuin funktiot.
Esimerkki 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; }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
- Luo luokka nimeltä TestClass.
- Käytä yksityisen käyttöoikeuden muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
- Luo kokonaislukumuuttujamäärä. Tämä muuttuja on yksityisesti käytettävissä.
- Käytä julkisen käyttöoikeuden muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
- Käytä luokkakonstruktoria alustaaksesi muuttujalaskurin arvoksi 5.
- Ylikuormita operaattorin merkitys.
- Operaattori pienentää muuttujan x arvoa yhdellä.
- Kuljettajan ylikuormitusosan loppu. Operaattorille on annettu uusi nimi.
- Näyttö()-nimisen funktion määrittäminen.
- Tulosta muuttujan count arvo muun tekstin rinnalle konsoliin, kun Display()-funktiota kutsutaan. } merkitsee Display()-funktion rungon loppua.
- Luokan rungon loppu.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tähän toimintoon.
- Luo esiintymä luokasta TestClass ja anna sille nimi tc.
- Tämä kutsuu void-operaattorin –()-funktion.
- Käytä TestClass Class -asentoa Display()-funktion kutsumiseen.
- Toiminnon on palautettava arvo, kun se on suoritettu.
- Funktion main() rungon loppu.
Erilaisia lähestymistapoja Operator Ylikuormitus sisään C++
Voit suorittaa operaattorin ylikuormituksen toteuttamalla minkä tahansa seuraavista toiminnoista:
- Jäsentoiminto
- Ei-jäsentoiminto
- Ystävätoiminto
- Operaattorin ylikuormitusfunktio voi olla jäsenfunktio, kun vasen operandi on luokan objekti.
- Kun vasen operandi on erilainen, Operator-ylikuormitustoiminnon tulisi olla ei-jäsentoiminto.
Voit tehdä operaattorin ylikuormitustoiminnosta ystävätoiminnon, jos se tarvitsee pääsyn yksityisiin ja suojattuihin luokan jäseniin.
Voiko kaikki C++ Operaovatko ne ylikuormitettuja?
Ei. On C++ operaattorit, joita ei voi ylikuormittaa.
Niihin kuuluvat:
- :: -Scope-resoluutiooperaattori
- ?: -kolmioperaattori.
- . -jäsenvalitsin
- Operaattorin koko
- * -jäsen osoittimen valitsin
Muistettavaa
- Operaattorin ylikuormituksella voit määrittää uudelleen tavan, jolla operaattori toimii vain käyttäjän määrittämille tyypeille (objektit, rakenteet). Et voi käyttää sitä sisäänrakennetuissa tyypeissä (float, char, int jne.).
- = ja & C++ operaattorit ovat oletuksena ylikuormitettuja. Voit esimerkiksi kopioida saman luokan objektit suoraan =-operaattorilla.
- OperaEnsisijaisuus ei muuta operaattoreiden assosiatiivisuutta ja ensisijaisuutta. Voit kuitenkin muuttaa arvioinnin järjestystä suluilla.
- On neljä operaattoria, joita et voi ylikuormittaa C++. Niitä ovat laajuuden erotteluoperaattori (::), jäsenvalintaoperaattori (.), jäsenvalinta osoittimen avulla toimintooperaattoriin (.*) ja kolmiosainen operaattori (?:).
Säännöt Operator Ylikuormitus
Tässä ovat säännöt Operator ylikuormitus:
- Jotta se toimisi, vähintään yhden operandin on oltava käyttäjän määrittämä luokkaobjekti.
- Voit ylikuormittaa vain olemassa olevia operaattoreita. Uusia operaattoreita ei voi ylikuormittaa.
- Joitakin operaattoreita ei voi ylikuormittaa kaveritoiminnolla. Tällaiset operaattorit voidaan kuitenkin ylikuormittaa jäsentoimintoa käyttämällä.
Kuinka ylikuormittaa OperaTor
Esimerkki 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; }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
- Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
- Luo luokka nimeltä OperatoOverload.
- Käytä yksityisen käyttöoikeuden muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
- Luo kokonaislukumuuttuja x. Tämä muuttuja on yksityisesti käytettävissä.
- Käytä julkisen käyttöoikeuden muokkausta, joka merkitsee luokan jäsenen yksityisesti käytettävissä olevaksi.
- Käytä luokkakonstruktoria alustaaksesi muuttujan x arvoon 10.
- Ylikuormitetaan ++-operaattorin merkitys.
- Operaattori lisää muuttujan x arvoa kahdella.
- Kuljettajan ylikuormitusosan loppu. Operaattorille on annettu uusi nimi.
- Print()-funktion kutsuminen.
- Tulosta muuttujan x arvo muun tekstin rinnalle konsolissa, kun Print()-funktiota kutsutaan.
- Print()-funktion rungon loppu.
- Luokan rungon loppu.
- Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tähän toimintoon.
- Luo esiintymä OperatorOverload Luokka nimeltä ov.
- Tämä kutsuu void-operaattorin ++() -funktion.
- Käytä asentoa OperatorOverload-luokka kutsuaksesi Print()-funktiota.
- Toiminnon on palautettava arvo, kun se on suoritettu.
- Funktion main() rungon loppu.
Esimerkki 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(); }
lähtö:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Sisällytä iostream-otsikkotiedosto ohjelmaamme käyttääksemme sen toimintoja.
- Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
- Luo luokka nimeltä TestClass. { merkitsee luokan rungon alkua.
- Käytä yksityisen käyttöoikeuden muokkaajaa merkitäksesi muuttujat yksityisiksi, mikä tarkoittaa, että niihin pääsee vain luokasta käsin.
- Määritä kaksi kokonaislukumuuttujaa, real ja over.
- Käytä julkisen käyttöoikeuden muokkaajaa merkitsemään rakentaja julkiseksi, mikä tarkoittaa, että se on käytettävissä myös luokan ulkopuolella.
- Luokan rakentajan luominen ja alustaminen muuttujat.
- Alusta muuttujan real arvo.
- Alusta muuttujan arvo yli.
- Rakentajan rungon loppu.
- Ohita +-operaattorin merkitys.
- Luo tietotyypin tulos, jonka tyyppi on TestClass.
- Käytä +-operaattoria kompleksilukujen kanssa. Tämä rivi lisää luvun reaaliosan toisen luvun reaaliosaan.
- Käytä +-operaattoria kompleksilukujen kanssa. Tämä rivi lisää luvun imaginaarisen osan toisen luvun imaginaariseen osaan.
- Ohjelma palauttaa muuttujan tuloksen arvon onnistuneen suorituksen jälkeen.
- + -operaattorin uuden merkityksen, eli ylikuormituksen, määritelmän loppu.
- Kutsu print()-menetelmää.
- Tulosta uusi kompleksiluku lisäyksen jälkeen konsolissa.
- Print()-funktion rungon loppu.
- TestClass-luokan rungon loppu.
- Main()-funktion kutsuminen.
- Sekä todellisten että monimutkaisten lisättävien osien arvojen välittäminen. C1:n ensimmäinen osa lisätään c2:n ensimmäiseen osaan, eli 9+4. C1:n toinen osa lisätään c:n toiseen osaan, eli 5+3.
- Toiminnon suorittaminen ylikuormitettu + -operaattorilla ja tuloksen tallentaminen muuttujaan c3.
- Muuttujan c3 arvon tulostaminen konsoliin.
- Main()-funktion rungon loppu.
Yhteenveto
- Voit määrittää a:lle useamman kuin yhden merkityksen C++ operaattori yhdessä laajuudessa.
- Tätä kutsutaan operaattorin ylikuormitukseksi.
- Operator overloading tarjoaa operaattorin erityisen merkityksen käyttäjän määrittämälle tietotyypille.
- Voit määrittää suurimman osan uudelleen C++ operaattorit ylikuormituksen vuoksi.
- Ei kaikki C++ operaattorit voivat olla ylikuormitettuja.
- Jotta operaattori olisi ylikuormitettu, ainakin yhden operandeista on oltava käyttäjän määrittämä objekti.
- Vain olemassa olevat käyttäjät voivat ylikuormittua. Et voi ylikuormittaa uusia operaattoreita.