C ++

Pārslodze C ++

Pārslodze C ++
C ++ neatļauj funkciju, kas pievieno divus veselus skaitļus un atgriež veselu skaitli, lai pievienotu divus pludiņus un atgrieztu pludiņu. Iedomājieties, ka ir funkcija pievienot divus veselus skaitļus un atgriezt veselu skaitli. Vai nebūtu jauki, ja būtu vēl viena funkcija ar tādu pašu nosaukumu, kas pievieno tikai divus vai pat vairāk pludiņus, lai atgrieztu pludiņu? Tiek darīts, ka tā ir, pārslogojot pirmo funkciju.

Aritmētiskās operācijas parasti izmanto aritmētiskajiem operatoriem. Vai nav jauki, ka jums ir +, pievienojieties divām stīgām? Iespējojot to, tiek pārslogota virkņu aritmētiskā papildinājuma operators.

Inkrementa operators ++ int vai pludiņam pievieno 1. Nodarbojoties ar rādītājiem, rādītājam nepievieno 1. Tas liek rādītājam norādīt uz nākamo atmiņas objektu pēc kārtas. Atkārtotājs norāda uz nākamo objektu saistītajā sarakstā, bet saistītā saraksta objekti atrodas dažādās atmiņas vietās (nevis secīgos reģionos). Vai nebūtu jauki pārslogot pieauguma operatoru iteratoram, lai palielinātu, bet norādiet uz saistīto sarakstu?

Šajā rakstā ir izskaidrota pārslodze C++. Tas ir sadalīts divās daļās: funkciju pārslodze un operatora pārslodze. Lai saprastu pārējo rakstu, ir nepieciešamas jau pamatzināšanas C ++ valodā.

Raksta saturs

Funkcija Pārslodze

Šī funkcija pievieno divus intus un atgriež int:

int pievienot (int no1, int no2)

int summa = no1 + no2;
atdeves summa;

Šīs funkcijas prototips ir:
int pievienot (int no1, int no2);
Funkcijas prototips funkcijas galvenē, kas beidzas ar semikolu. Šī funkcija ar tādu pašu nosaukumu, bet ar atšķirīgu prototipu pievienotu trīs pludiņus un atgrieztu pludiņu:
pludiņa pievienošana (pludiņš nr1, pludiņš nr2, pludiņš nr3)

pludiņa summa = no1 + no2 + no3;
atdeves summa;

Kā sastādītājs atšķir, kuru funkciju izsaukt, jo divām vai vairākām funkcijām ir vienāds nosaukums? Kompilators izmanto argumentu skaitu un argumentu tipus, lai noteiktu, kuru funkciju izsaukt. Pārslogoto funkciju parametru sarakstam vajadzētu atšķirties pēc to skaita un / vai parametru veida. Tātad, funkcijas izsaukums,

int sm = pievienot (2, 3);

izsauktu funkciju vesels skaitlis, bet funkcija izsauktu,

pludiņš sme = pievienot (2.3, 3.4, 2.0);

izsauktu pludiņa funkciju. Piezīme: ir situācijas, kad kompilators noraidīs pārslogotu funkciju, ja argumentu skaits ir vienāds, bet dažāda veida! - Iemesls: - skatīt vēlāk.

Šī programma aktivizē iepriekš minētos koda segmentus:

# iekļaut
izmantojot nosaukumvietu std;
int pievienot (int no1, int no2)

int summa = no1 + no2;
atdeves summa;

pludiņa pievienošana (pludiņš nr1, pludiņš nr2, pludiņš nr3)

pludiņa summa = no1 + no2 + no3;
atdeves summa;

int main ()

int sm = pievienot (2, 3);
cout<pludiņš sme = pievienot (2.3, 3.4, 2.0);
cout<atgriešanās 0;

Rezultāts ir:
5
7.7

Operatora pārslodze

Aritmētiskie operatori tiek izmantoti operāciju pārslodzei klases tipos. Iterators ir klases tips. Pieauguma un samazināšanas operatori tiek izmantoti, lai pārslogotu iteratora darbības.

Stīgu klases operatora pārslodzes piemērs

Šajā sadaļā ir sniegts piemērs, kur + ir pārslogota vienkārši izveidotai virkņu klasei, ko sauc par atsperes klasi. + savieno divu stīgu objektu literāļus, atgriežot jaunu objektu ar sasietajiem literāļiem. Divu literāļu savienošana nozīmē otrā literāļa pievienošanu pirmā literāļa beigām.

Tagad C ++ visām klasēm ir īpaša dalībnieka funkcija, ko sauc par operatoru. Programmētājs var izmantot šo īpašo funkciju, lai pārslogotu operatorus, piemēram, +. Šī programma parāda operatora + pārslodzi divām virknēm.

# iekļaut
izmantojot nosaukumvietu std;
klases pavasaris

publiski:
// datu dalībnieki
char val [100];
int n;
char concat [100];
// biedra funkcijas
pavasaris (char arr [])

par (int i = 0; i<100; ++i)
val [i] = arr [i];
ja (arr [i] == '\ 0')
pārtraukums;

int i;
par (i = 0; i<100; ++i) if (arr[i] == '\0') break;
n = i;

pavasara operators + (pavasaris un st)
int newLen = n + st.n;
char newStr [newLen + 1];
par (int i = 0; ipar (int i = n; inewStr [newLen] = '\ 0';
pavasara obj (newStr);
atgriešanās obj;

;
int main ()

char ch1 [] = "Es tevi ienīstu! "; atsperes str1 (ch1);
char ch2 [] = "Bet viņa tevi mīl!"; atsperes str2 (ch2);
char ch3 [] = "viens"; atsperes str3 (ch3);
str3 = str1 + str2;
cout<atgriešanās 0;

Str1 vērtība ir "Es tevi ienīstu! ". Str2 vērtība ir "Bet viņa tevi mīl!". Str3 vērtība, kas ir str1 + str2, ir izeja:

"ES tevi ienīstu! Bet viņa tevi mīl!"

kas ir divu stīgu literāļu savienojums. Pašas virknes ir momentizēti objekti.

Operatora funkcijas definīcija atrodas virknes klases aprakstā (definīcijā). Tas sākas ar atgriešanās veidu "pavasaris" vārdam "virkne". Īpašais nosaukums "operators, sekojiet šim". Pēc tam ir operatora simbols (jāpārkrauj). Tad ir parametru saraksts, kas faktiski ir operandu saraksts. + ir binārs operators: tas nozīmē, ka tas prasa kreiso un labo operandu. Tomēr saskaņā ar C ++ specifikāciju parametru sarakstā šeit ir tikai pareizais parametrs. Tad ir operatora funkcijas ķermenis, kas atdarina parasto operatora uzvedību.

Pēc C ++ specifikācijas + operatora definīcija ņem tikai labo operanda parametru, jo pārējais klases apraksts ir kreisā operanda parametrs.

Iepriekš minētajā kodā tikai + () funkcijas definīcija attiecas uz + pārslodzi. Pārējais klases kods ir normāls kodējums. Šajā definīcijā divi virknes literāļi ir apvienoti masīvā newStr []. Pēc tam faktiski tiek izveidots jauns (virknes objekts) virknes objekts, izmantojot argumentu newStr []. Operatora + () funkcijas definīcijas beigās tiek atgriezts jaunizveidotais objekts ar sasietu virkni.

Funkcijā main () pievienošanu veic ar paziņojumu:

str3 = str1 + str2;

Kur str1, str2 un str3 ir virknes objekti, kas jau ir izveidoti main (). Izteiksme “str1 + str2” ar savu + izsauc operatora + () dalībnieka funkciju str1 objektā. Operatora + () dalībnieka funkcija str1 objektā kā argumentu izmanto str2 un atgriež jauno objektu ar (izveidotu) sasietu virkni. Piešķīruma operators (=) pilnīgajā priekšrakstā aizstāj str3 objekta saturu (mainīgo vērtības) ar atgrieztā objekta saturu. Funkcijā main () pēc pievienošanas datu dalībnieka str3 vērtība.val vairs nav "viens"; tā ir sasietā (papildinājuma) virkne: "Es tevi ienīstu! Bet viņa tevi mīl!". Operatora + () dalībnieka funkcija str1 objektā izmanto sava objekta virknes literālu un argumenta virknes litālu str2, lai izdomātu apvienotu virknes literālu.

Iteratora operatora pārslodze

Strādājot ar iteratoru, tiek iesaistīti vismaz divi objekti: saistīts saraksts un pats iterators. Faktiski ir iesaistītas vismaz divas klases: klase, no kuras tiek izveidots sasaistītais saraksts, un klase, no kuras tiek iterators.

Saistīto saraksts

Divkārši saistītā saraksta objekta diagramma ir:

Šajā sarakstā ir trīs elementi, taču var būt vairāk. Trīs elementi šeit ir veselu skaitļu elementi. Pirmajam ir vērtība 14; nākamajam ir vērtība 88; un pēdējam ir vērtība 47. Katrs elements šeit sastāv no trim secīgām vietām.

Tas atšķirībā no masīva, kur katrs elements ir viena vieta, un visi masīva elementi atrodas secīgās vietās. Šeit dažādi elementi atrodas dažādās atmiņas sērijas vietās, bet katrs elements sastāv no trim secīgām vietām.

Katram elementam vidējā atrašanās vieta saglabā vērtību. Pareizajā vietā ir rādītājs uz nākamo elementu. Kreisajā vietā ir rādītājs uz iepriekšējo elementu. Pēdējam elementam pareizā atrašanās vieta norāda uz saraksta teorētisko beigu daļu. Pirmajam elementam kreisā vieta norāda uz saraksta teorētisko sākumu.

Izmantojot masīvu, pieauguma operators (++) palielina rādītāju, lai norādītu uz fiziski nākamo vietu. Izmantojot sarakstu, elementi neatrodas secīgos atmiņas reģionos. Tātad pieauguma operatoru var pārslogot, pārvietojiet iteratoru (rādītāju) no viena elementa uz loģiski nākamo elementu. Šī pati projekcija attiecas uz samazināšanas operatoru (-).

Pārsūtītājs ir atkārtotājs, kas, iesaistoties, norāda uz nākamo elementu. Reversais iterators ir iterators, kas, ieslēdzoties, norāda uz iepriekšējo elementu.

++ reklāmas pārslodze -

Šo operatoru pārslodze tiek veikta iteratora klases aprakstā (definīcijā).

Pieaugošā operatora pārslodzes, prefiksa, prototipa sintakse ir

ReturnType operators ++ ();

Pieaugošā operatora pārslodzes, postfix, prototipa sintakse ir

ReturnType operators ++ (int);

Decrement operatora pārslodzes, prefiksa, prototipa sintakse ir

ReturnType operators - ();

Pieaugošā operatora pārslodzes, postfix, prototipa sintakse ir

ReturnType operators - (int);

Secinājums

Pārslodze nozīmē funkcijas vai operatora atšķirīgas nozīmes piešķiršanu. Funkcijas ir pārslogotas vienā un tajā pašā sfērā. Pārslogotās funkcijas atšķir parametru skaits un / vai to parametru saraksti. Dažos gadījumos, kad parametru skaits ir vienāds, bet ar dažādiem tipiem, sastādītājs noraida pārslodzi - skatīt vēlāk. Daudzi parastie operatori var būt pārslogoti klasēs, no kurām tiek izveidoti objekti. Tas tiek darīts, klases aprakstā piešķirot atgriešanās veidu, parametru sarakstu un pamattekstu īpašajai funkcijai, kuras nosaukums ir operators.

Vidējā peles poga nedarbojas sistēmā Windows 10
The peles vidējā poga palīdz jums ritināt garas tīmekļa lapas un ekrānus ar lielu datu daudzumu. Ja tas apstājas, jūs galu galā izmantosiet tastatūru,...
Kā nomainīt peles kreiso un labo pogu operētājsistēmā Windows 10
Tas ir diezgan normāli, ka visas datora peles ierīces ir ergonomiski izstrādātas lietotājiem ar labo roku. Bet ir pieejamas peles ierīces, kas ir īpaš...
Atdariniet peles klikšķus, virzot kursoru, izmantojot operētājsistēmā Windows 10 bezklikšķu peli
Peles vai tastatūras lietošana nepareizā pozā, ja to lieto pārmērīgi daudz, var izraisīt daudz veselības problēmu, tostarp spriedzi, karpālā kanāla si...