Personal tools

Talk:Supraîncărcarea operatorilor în limbajul C-plus-plus

From linux360

Jump to: navigation, search

Despre continut

  • Am scos eu comentariile din cod pentru ca stilul WikiPedia (pe care il urmam ca model) este impersonal. As dori sa multumesc aici lui User:andreich si lui Radu Bolovan pentru contributiile aduse la exemplul de C++ dat in articol. @Dexter 12:43, 22 November 2005 (EET)
  • Multumim lui Radu Bolovan pentru corectura negatiei (Ar fi mai simplu). @Dexter 22:08, 22 November 2005 (EET)
  • Si eu iti multumesc @Dexter pentru forma actuala a paginii. Arata mult mai bine asa cum este acum decat cum o facusem eu! Radu Bolovan 10:42, 23 November 2005 (EET)
  • Il rugam pe User:86.35.118.6 sa se abtina, pe viitor, de la stersaturi nemotivate -- in caz contrar risca sa i se impuna restrictii administrative de acces la acest Wiki. @Dexter 15:11, 1 December 2005 (EET)
  • Am primit astazi urmatoarele observatii de la un cititor: "Buna ziua, Am incercat sa iau legatura cu autorul unuia dintre articolele de pe wiki pentru a-i transmite cateva sugestii legate de o bucata de cod data ca exemplu, fara succes insa. Articolul este «Supraîncărcarea operatorilor în limbajul C++» iar sugestiile respective ar fi:
    • constructorul de copiere definit in forma <cpp/>MyPoint(MyPoint &r); se foloseste numai in (rarele) cazuri cand este necesara modificarea parametrului in interiorul sau, in marea majoritate a cazurilor preferandu-se forma <cpp/>MyPoint(MyPoint const &r); a doua forma, printre altele, iti permite sa copii obiecte temporare (se foloseste de exemplu in out << pt++ << endl;);
    • prin supraincarcare nu poate fi modificata aritatea unui operator, prin urmare operatorul = nu poate fi supraincarcat astfel:<cpp/>MyPoint& operator=(double a, double b);pentru ca ar deveni operator ternar (cum s-ar folosi intr-o expresie in cazul asta?);
    • a doua varianta a operatorului *, multiplicarea cu o constanta, ar trebui sa returneze un temporar, la fel ca prima varianta, nu sa modifice obiectul initial si apoi sa returneze o referinta la el (este oarecum nefiresc ca in p1 = p2 * 5 sa se modifice atat p1 cat si p2, lasand la o parte faptul ca p1 ar trebui declarat ca referinta);
    • plecand de la punctul anterior, ar fi fost utila zic eu si varianta de supraincarcare care sa permita si expresii de genul p1 = 5 * p2;
    • la operatorii aritmetici uzuali (+, -, *, /) parametrul poate fi const, pentru ca in mod normal acestia nu modifica valorile argumentelor;
    • la supraincarcarea operatorului >> al doilea parametru nu poate fi const, scopul fiind tocmai de a-i modifica valoarea;
    • din moment ce membrii x si y sunt double, getX() si getY() ar trebui sa returneze tot double;
    • pentru forma postfixata a operatorului ++ se foloseste de obicei un parametru anonim:<cpp/>MyPoint MyPoint::operator++(int)(nu stiu daca vine din standard chestia asta sau e best practice)
    • tot legat de ++ postfixat, pentru a obtine comportarea fireasca pentru un operator postfixat, se face o copie a obiectului initial, se modifica obiectul si apoi se returneaza copia initiala (altfel se obtine acelasi efect ca si in cazul variantei prefixate)".

E cineva prin jur cu suficienta experienta in ANSI C++ spre a se uita peste recomandari si eventual chiar a le implementa in articol? @Dexter 18:55, 11 December 2006 (EET) în numele lui Ionuţ Luncanu.