23) Suprasolicitarea operațiunilor standard

Supraîncărcarea operatorului vă poate determina valoarea pentru o anumită clasă. De exemplu, o clasă care definește o listă asociată poate folosi operatorul "+" pentru a adăuga un obiect în listă. Clasa care implementează stiva poate folosi operatorul "+" pentru a scrie un obiect la stivă. În altă clasă, același operator "+" ar putea servi pentru un scop complet diferit. Când operatorul este supraîncărcat, niciuna dintre valorile inițiale nu este pierdută. Operatorul supraîncărcat (în noua sa capacitate) funcționează ca un operator complet nou. Prin urmare, supraîncărcarea operatorului "+" pentru a procesa, de exemplu, o listă legată nu va schimba funcția sa (adică operațiunea de adăugare) în raport cu valorile întregi.

Supraîncărcarea operatorului este strâns legată de supraîncărcarea funcțiilor. Pentru a supraîncărca un operator, trebuie să determinați valoarea noii operații pentru clasa la care se va aplica. Pentru aceasta, este creată o funcție operator (funcția operator) care determină funcționarea acestui operator. Formatul general al operatorului este după cum urmează.

Atunci când operatorul binar este supraîncărcat utilizând o funcție membră, un singur argument îi este transmis în mod explicit. Al doilea este implicit trecut prin acest pointer. Astfel, în linia

sub termenul x se înțelege membrul respectiv -> x, adică termenul x este asociat cu obiectul care apelează funcția dată de operator. În toate cazurile, obiectul indicat în stânga simbolului de funcționare este trecut implicit, ceea ce a determinat apelul funcției operator. Obiectul care este situat în partea dreaptă a simbolului de funcționare este trecut la această funcție ca argument. În general, atunci când se folosește funcția membră pentru supraîncărcarea operatorului unar, parametrii nu sunt utilizați deloc, iar pentru supraîncărcarea binară este utilizat un singur parametru. (Operatorul ternar "?" Nu poate fi supraîncărcat.) În orice caz, obiectul care apelează funcția operator este implicit trecut prin acest pointer.

Spre deosebire de operatorul "+", operatorul de atribuire conduce la modificarea unuia dintre argumentele sale. (În primul rând, aceasta este esența atribuției.) Deoarece operatorul funcției = () este apelat de obiectul aflat în partea stângă a simbolului de atribuire (=), acest obiect este modificat ca rezultat al operației de atribuire. După efectuarea acestei operații, valoarea returnată de operatorul supraîncărcat conține obiectul specificat în partea stângă a simbolului de atribuire. (Această stare de lucruri este pe deplin de acord cu acțiunea tradițională a operatorului "=".)

Moștenirea este unul dintre cele trei principii fundamentale ale programării orientate obiect, deoarece prin ea se pot crea clasificări ierarhice. Folosind moștenirea, puteți crea o clasă generică care definește caracteristicile inerente unui număr de elemente conexe. Această clasă poate fi apoi moștenită de alte clase foarte specializate, cu adăugarea de caracteristici unice pentru fiecare dintre ele.

În terminologia standard a C ++, clasa care moștenește se numește clasa de bază. O clasă care moștenește o clasă de bază se numește o clasă derivată. O clasă derivată poate fi utilizată ca o clasă de bază pentru o altă clasă derivată. În acest fel, se construiește o ierarhie a claselor pe mai multe niveluri.