Kas yra operatoriaus perkrova?
Naudodami operatoriaus perkrovą C ++, galite nurodyti daugiau nei vieną operatoriaus reikšmę vienoje srityje. Operatoriaus perkrovos tikslas - suteikti specialią operatoriaus reikšmę vartotojo apibrėžtam duomenų tipui.
Naudodamiesi operatoriaus perkrova, galite iš naujo apibrėžti daugumą C ++ operatorių. Taip pat galite naudoti operatoriaus perkrovą, kad atliktumėte įvairias operacijas naudodami vieną operatorių.
Šioje C ++ pamokoje sužinosite:
- Kas yra operatoriaus perkrova?
- Sintaksė
- Skirtingi požiūriai į operatoriaus perkrovą C ++
- Ar visi „C ++“ operatoriai gali būti perkrauti?
- Įsimintini dalykai:
- Operatoriaus perkrovos taisyklės:
- Kaip perkrauti operatorių:
Sintaksė
Norėdami perkrauti C ++ operatorių, klasėje turėtumėte apibrėžti specialią funkciją taip:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Čia yra pirmiau nurodytos sintaksės paaiškinimas:
- Return_type yra funkcijos grąžinimo tipas.
- Tada paminėjate operatoriaus raktinį žodį.
- Simbolis žymi perkrautą operatoriaus simbolį. Pavyzdžiui, +, -, <, ++.
- Argumentą (-us) operatoriaus funkcijai galima perduoti taip pat, kaip ir funkcijas.
1 pavyzdys:
#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;}
Išvestis:
Čia yra kodo ekrano kopija:
Kodo paaiškinimas:
- „Iostream“ antraštės failo įtraukimas į mūsų kodą, kad būtų galima naudoti jo funkcijas.
- Įtraukite standartinę vardų sritį į mūsų programą, kad galėtumėte naudoti jos klases nepaskambinę.
- Sukurkite klasę pavadinimu TestClass.
- Naudokite privačios prieigos modifikatorių, kuris pažymi klasės narį kaip privačiai prieinamą.
- Sukurkite sveikojo skaičiaus kintamųjų skaičių. Šis kintamasis bus prieinamas privačiai.
- Naudokite viešosios prieigos modifikatorių, kuris pažymi klasės narį kaip privačiai prieinamą.
- Norėdami inicijuoti kintamųjų skaitiklį iki 5, naudokite klasės konstruktorių.
- Perkraukite operatoriaus reikšmę.
- Operatorius sumažins kintamojo x vertę 1.
- Operatoriaus perkrovos sekcijos pabaiga. Operatoriui suteiktas naujas vardas.
- Apibrėžkite funkciją, pavadintą „Display“ (funkcija).
- Kai iškviečiama funkcija Display (), atspausdinkite kintamųjų skaičiaus vertę šalia kito konsolės teksto. } Žymi „Display“) funkcijos teksto pabaigą.
- Klasės kūno pabaiga.
- Iškvieskite pagrindinę () funkciją. Programos logika turėtų būti įtraukta į šią funkciją.
- Sukurkite „TestClass“ klasės egzempliorių ir suteikite jam pavadinimą tc.
- Tai iškvies funkciją void operator - ().
- Norėdami iškviesti „Display“) funkciją, naudokite „TestClass Class“ poziciją.
- Sėkmingai įvykdžius funkciją, ji turi grąžinti vertę.
- Funkcijos pagrindinė () kūno pabaiga.
Skirtingi požiūriai į operatoriaus perkrovą C ++
Operatoriaus perkrovą galite atlikti įgyvendindami bet kurią iš šių tipų funkcijų:
- Nario funkcija
- Ne nario funkcija
- Draugo funkcija
- Operatoriaus perkrovos funkcija gali būti nario funkcija, kai kairysis operandas yra klasės objektas.
- Kai kairysis operandas yra kitoks, operatoriaus perkrovos funkcija turėtų būti ne nario funkcija.
Operatoriaus perkrovos funkciją galite padaryti draugo funkcija, jei jai reikia pasiekti privačius ir saugomus klasės narius.
Ar visi „C ++“ operatoriai gali būti perkrauti?
Ne. Yra C ++ operatorių, kurių negalima perkrauti.
Jie įtraukia:
- :: -Taikymo skyros operatorius
- ?: - paprastas operatorius.
- . -nario selektorius
- Operatoriaus dydis
- * -dalykio žymeklio parinkiklis
Įsimintini dalykai:
- Naudodamiesi operatoriaus perkrova, galite iš naujo apibrėžti, kaip operatorius veikia tik pagal vartotojo apibrėžtus tipus (objektus, struktūras). Negalite jo naudoti įmontuotiems tipams („float“, „char“, „int“ ir kt.).
- Operatoriai = ir & C ++ pagal numatytuosius nustatymus yra perkrauti. Pavyzdžiui, galite nukopijuoti tos pačios klasės objektus tiesiogiai naudodami = operatorių.
- Operatoriaus pirmenybė nekeičia operatorių asociatyvumo ir pirmenybės. Tačiau vertinimo tvarką galite pakeisti naudodami skliaustus.
- Yra keturi operatoriai, kurių negalima perkrauti C ++. Jie apima srities skyrimo operatorių (: :), narių pasirinkimo operatorių (.), Narių pasirinkimą per rodyklę, kad būtų galima valdyti funkciją (. *), Ir trijų komponentų operatorių (? :).
Operatoriaus perkrovos taisyklės:
Operatoriaus perkrovos taisyklės yra šios:
- Kad jis veiktų, bent vienas operandas turi būti vartotojo apibrėžtas klasės objektas.
- Galite perkrauti tik esamus operatorius. Negalite perkrauti naujų operatorių.
- Kai kurių operatorių negalima perkrauti naudojant draugo funkciją. Tačiau tokius operatorius galima perkrauti naudojant nario funkciją.
Kaip perkrauti operatorių:
1 pavyzdys:
#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;}
Išvestis:
Čia yra kodo ekrano kopija:
Kodo paaiškinimas:
- „Iostream“ antraštės failo įtraukimas į mūsų kodą, kad būtų galima naudoti jo funkcijas.
- Įtraukite standartinę vardų sritį į mūsų programą, kad galėtumėte naudoti jos klases nepaskambinę.
- Sukurkite klasę pavadinimu „OperatorOverload“.
- Naudokite privačios prieigos modifikatorių, kuris pažymi klasės narį kaip privačiai prieinamą.
- Sukurkite sveiko skaičiaus kintamąjį x. Šis kintamasis bus prieinamas privačiai.
- Naudokite viešosios prieigos modifikatorių, kuris pažymi klasės narį kaip privačiai prieinamą.
- Norėdami inicijuoti kintamąjį x iki 10, naudokite klasės konstruktorių.
- Perkraukite ++ operatoriaus reikšmę.
- Operatorius kintamojo x vertę padidins 2.
- Operatoriaus perkrovos sekcijos pabaiga. Operatoriui suteiktas naujas vardas.
- Skambinimas funkcija Print ().
- Kai iškviečiama funkcija Print (), spausdinkite kintamojo x reikšmę kartu su kitu tekstu konsolėje.
- Funkcijos Print () teksto pabaiga.
- Klasės kūno pabaiga.
- Iškvieskite pagrindinę () funkciją. Programos logika turėtų būti įtraukta į šią funkciją.
- Sukurkite „OperatorOverload Class“ egzempliorių pavadinimu „ov“.
- Tai iškvies „void operator“ funkciją ++ ().
- Norėdami iškviesti spausdinimo () funkciją, naudokite „OperatorOverload“ klasės poziciją.
- Sėkmingai įvykdžius funkciją, ji turi grąžinti vertę.
- Funkcijos pagrindinė () kūno pabaiga.
2 pavyzdys:
#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();}
Išvestis:
Čia yra kodo ekrano kopija:
Kodo paaiškinimas:
- „Iostream“ antraštės failo įtraukimas į mūsų programą, kad būtų galima naudoti jo funkcijas.
- Įtraukite standartinę vardų sritį į mūsų programą, kad galėtumėte naudoti jos klases nepaskambinę.
- Sukurkite klasę pavadinimu TestClass. {Žymi klasės kūno pradžią.
- Norėdami pažymėti kintamuosius kaip privačius, naudokite privačios prieigos modifikatorių, o tai reiškia, kad prie jų galima pasiekti tik iš klasės.
- Apibrėžkite du sveikojo skaičiaus kintamuosius, tikrąjį ir didesnį.
- Naudokite viešosios prieigos modifikatorių, kad pažymėtumėte konstruktorių kaip viešą, o tai reiškia, kad jis bus prieinamas net už klasės ribų.
- Kuriant klasės konstruktorių ir inicijuojant kintamuosius.
- Inicializuokite realaus kintamojo vertę.
- Inicializuokite kintamojo reikšmę.
- Konstruktoriaus korpuso pabaiga.
- Nepaisyti + operatoriaus reikšmės.
- Sukurkite „TestClass“ tipo duomenų tipo rezultatą.
- Naudokite + operatorių su sudėtingais skaičiais. Ši eilutė pridės tikrąją skaičiaus dalį prie realaus kito skaičiaus.
- Naudokite + operatorių su sudėtingais skaičiais. Ši eilutė pridės įsivaizduojamą skaičiaus dalį prie įsivaizduojamos kito skaičiaus dalies.
- Sėkmingai įvykdžius, programa grąžins kintamojo rezultato vertę.
- Naujos + operatoriaus reikšmės apibrėžimo pabaiga, tai yra perkrovimas.
- Iškvieskite spausdinimo () metodą.
- Po papildymo konsolėje atspausdinkite naują komplekso numerį.
- Funkcijos „Spausdinti“ () funkcijos pabaiga.
- TestClass klasės kėbulo pabaiga.
- Pagrindinės () funkcijos iškvietimas.
- Perduodamos tiek realių, tiek sudėtingų dalių vertės, kurias reikia pridėti. Pirmoji c1 dalis bus pridėta prie pirmosios c2 dalies, tai yra 9 + 4. Antroji c1 dalis bus pridėta prie antrosios c dalies, ty 5 + 3.
- Operacijos atlikimas naudojant perkrautą + operatorių ir rezultatas saugomas kintamajame c3.
- Kintamojo c3 vertės spausdinimas konsolėje.
- Pagrindinės () funkcijos kūno pabaiga.
Santrauka:
- Vienoje srityje galite nurodyti daugiau nei vieną C ++ operatoriaus reikšmę.
- Tai vadinama operatoriaus perkrova.
- Operatoriaus perkrova suteikia specialią operatoriaus reikšmę vartotojo apibrėžtam duomenų tipui.
- Galite iš naujo apibrėžti daugumą „C ++“ operatorių perkrovdami operatorių.
- Ne visi C ++ operatoriai gali būti perkrauti.
- Kad operatorius būtų perkrautas, bent vienas iš operandų turi būti vartotojo apibrėžtas objektas.
- Perkrauti galima tik esamus operatorius. Negalite perkrauti naujų operatorių.