Personal tools

Difference between revisions of "Talk:Supraîncărcarea operatorilor în limbajul C-plus-plus"

From linux360

Jump to: navigation, search
m (Am sters un div invizibil de la o vandalizare.)
(Added suggestions from Ionuţ Luncanu)
Line 4: Line 4:
 
* Si eu iti multumesc [[User:Csdexter|@Dexter]] pentru forma actuala a paginii. Arata mult mai bine asa cum este acum decat cum o facusem eu! [[User:Radubolovan|Radu Bolovan]] 10:42, 23 November 2005 (EET)
 
* Si eu iti multumesc [[User:Csdexter|@Dexter]] pentru forma actuala a paginii. Arata mult mai bine asa cum este acum decat cum o facusem eu! [[User:Radubolovan|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. [[User:Csdexter|@Dexter]] 15:11, 1 December 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. [[User:Csdexter|@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 <code><cpp/>MyPoint(MyPoint &r);</code> se foloseste numai in (rarele) cazuri cand este necesara modificarea parametrului in interiorul sau, in marea majoritate a cazurilor preferandu-se forma <code><cpp/>MyPoint(MyPoint const &r);</code> a doua forma, printre altele, iti permite sa copii obiecte temporare (se foloseste de exemplu in <tt>out << pt++ << endl;</tt>);''
 +
** ''prin supraincarcare nu poate fi modificata aritatea unui operator, prin urmare operatorul <tt>=</tt> nu poate fi supraincarcat astfel:<code><cpp/>MyPoint& operator=(double a, double b);</code>pentru ca ar deveni operator ternar (cum s-ar folosi intr-o expresie in cazul asta?);''
 +
** ''a doua varianta a operatorului <tt>*</tt>, 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 <tt>p1 = p2 * 5</tt> sa se modifice atat <tt>p1</tt> cat si <tt>p2</tt>, lasand la o parte faptul ca <tt>p1</tt> 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 <tt>p1 = 5 * p2</tt>;''
 +
** ''la operatorii aritmetici uzuali (<tt>+</tt>, <tt>-</tt>, <tt>*</tt>, <tt>/</tt>) parametrul poate fi <tt>const</tt>, pentru ca in mod normal acestia nu modifica valorile argumentelor;''
 +
** ''la supraincarcarea operatorului <tt>>></tt> al doilea parametru nu poate fi <tt>const</tt>, scopul fiind tocmai de a-i modifica valoarea;''
 +
** ''din moment ce membrii <tt>x</tt> si <tt>y</tt> sunt double, <tt>getX()</tt> si <tt>getY()</tt> ar trebui sa returneze tot <tt>double</tt>;
 +
** ''pentru forma postfixata a operatorului <tt>++</tt> se foloseste de obicei un parametru anonim:<code><cpp/>MyPoint MyPoint::operator++(int)</code>(nu stiu daca vine din standard chestia asta sau e best practice)''
 +
** ''tot legat de <tt>++</tt> 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?

Revision as of 19:53, 11 December 2006

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?