Difference between revisions of "Talk:Supraîncărcarea operatorilor în limbajul C-plus-plus"
From linux360
m (Forgot to sign my entry) |
|||
(6 intermediate revisions by 5 users not shown) | |||
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? [[User:Csdexter|@Dexter]] 18:55, 11 December 2006 (EET) în numele lui Ionuţ Luncanu. |
Latest revision as of 18:55, 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)".
- constructorul de copiere definit in forma
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.