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.



