Co lepiej zwracać operatorem '+' przy klasie?
Ostatnio zmodyfikowano 2017-01-07 01:48
latajacaryba Temat założony przez niniejszego użytkownika |
Co lepiej zwracać operatorem '+' przy klasie? » 2017-01-04 22:00:34 Witam. Zastanawiam się, co byłoby lepszym rozwiązaniem. class przyklad { int a; double b; string opis; int * tab_dynam; int rozmiar_tab; Typ operator +( int arg ) { } };
I w ciele return (a+arg) (typ int); czy... return przyklad wynik(... ,(a+arg) , ...) (w miejscu kropek jakieś tam argumenty konstruktora) (typ zwrotu - przyklad) bo z jednej strony możemy chcieć zrobić tak: przyklad obj(3) - zmienna a = 3 przyklad obj2(obj+3) zmienna a w obj2 ma rownac sie 6 - wtedy zwracamy operatorem int'a ale moze być tak: przyklad obj (3); przyklad obj2 = obj+3 - teraz chcemy żeby operator + zwrocil nam kopie obiektu obj ze zmienną 'a' równą 6 Tak więc jest to zależne od sytuacji czy może są jakieś (przeciw)wskazania? Nie muszę chyba dodawać, że myślę również o operatorze minus, razy, podzielić. |
|
michal11 |
» 2017-01-04 23:03:58 Polecam ci http://en.cppreference.com/w/cpp/language/operators do przeczytania, powinno ci sporo pomóc. Co do pytania to operator+ powinien być implementowany tak Type operator +( Type lhs, const Type & rhs ) { lhs += rhs; return lhs; }
co zresztą masz opisane dokładnie w linku. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-01-04 23:20:33 Angielski... boli... Ale i tak dzięki za pomoc ;) co do przykładu, mam dwa pytania: 1. co z funkcją składową? W ten sposób?: Type Type::operator +( const Type & rhs ) { * this += rhs; return * this; }
2. Operator += dodaje te dwa obiekty(składniki) i zwraca referencję do pierwszego z nich(rhs) a ta jest zwracana w operatorze +? operator +=( Type & rhs, Type const & lhs ) { rhs.skladnik += lhs.skladnik; retrun * rhs; }
Troche to dla mnie nie jasne - napisany prze mnie operator += zwraca referencje a operator+ chce kopie obiektu i zmodyfikowana (przez +=)kopie zwraca. Gdzie zrobiłem blad i jak powinno być? |
|
pekfos |
» 2017-01-04 23:32:20 co z funkcją składową? W ten sposób?:
Type Type::operator +( const Type & rhs ) { * this += rhs; return * this; } |
Nie. Musisz skopiować *this i na kopii wykonać +=. Dodatkowo ten operator powinien być const. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-01-04 23:37:38 No to kopiuje go chyba operator += napisany przeze mnie w poprzednim poscie. Czy sie myle? |
|
pekfos |
» 2017-01-04 23:40:34 W którym miejscu ten operator coś kopiuje? |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2017-01-05 09:40:19 Sorry, operator += zwraca referencje do obiektu, a kopia tej referencji(?) jest zwracana przez operator +. Bo operator += jest uzywany w ciele operatora +. Jesli zle mysle prosilbym o opisanie jak to wyglada. Dzieki |
|
michal11 |
» 2017-01-05 10:31:03 Type Type::operator +( const Type & rhs ) { * this += rhs; return * this; }
nie możesz tak napisać operatora+, zastanów co się stanie jeżeli będziesz miał taki kod. w szczególności co się stanie z t2. Dodatkowo operatory najlepiej rozważać poprzez analogię do inta, jak myślisz jak wygląda opearator+ dla czegoś takiego |
|
« 1 » 2 3 |