Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Co lepiej zwracać operatorem '+' przy klasie?

Ostatnio zmodyfikowano 2017-01-07 01:48
Autor Wiadomość
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.
C/C++
class przyklad
{
    int a;
    double b;
    string opis;
    int * tab_dynam;
    int rozmiar_tab;
    // konstruktor
    Typ operator +( int arg )
    {
        //cialo
    }
   
};
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ć.
P-155984
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
C/C++
Type operator +( Type lhs, const Type & rhs )
{
    lhs += rhs;
    return lhs;
}

co zresztą masz opisane dokładnie w linku.
P-156002
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?:
C/C++
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 +?
C/C++
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ć?
P-156004
pekfos
» 2017-01-04 23:32:20
co z funkcją składową? W ten sposób?:
C/C++
Type Type::operator +( const Type & rhs )
{
    * this += rhs;
    return * this;
}
Nie. Musisz skopiować *this i na kopii wykonać +=. Dodatkowo ten operator powinien być const.
P-156005
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?
P-156006
pekfos
» 2017-01-04 23:40:34
W którym miejscu ten operator coś kopiuje?
P-156007
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
P-156014
michal11
» 2017-01-05 10:31:03
C/C++
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.

C/C++
Type t1 = t2 + t3;

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
C/C++
int a = 2 + 3;
P-156016
« 1 » 2 3
  Strona 1 z 3 Następna strona