Wpis z mikrobloga

Gdy przeniosłem się z #python na #cpp myślałem, że otrzymałem całkowitą wolność. A tu proszę: http://pastebin.com/LbTvne6x - prosty przykład dwóch problemów jakie napotkałem; niemożność przeciążenia funkcji typem o tym samym typie podstawowym co ten użyty w już istniejącej funkcji oraz fakt, że definicja operatora nie może być szablonem. To taki sobie prosty przykład ale mam 10 podklas jednej klasy i fajnie by było móc użyć szablonu... chyba, że można, a ja coś źle robię bo jestem jeszcze noobem. :P
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@smsrampage:

1. Units of measure realizujesz jako nowe typy, a nie aliasy. W C++ możesz sobie pomóc za pomocą user-defined literals, które powstały przede wszystkim właśnie dla units of measure.

2. Sprawdź w jaki sposób implementuje się typowy operator przypisania, bo tutaj z tej wolności C++ korzystasz za bardzo i tworzysz wyciek pamięci.

3. Zastanów się czy dziedziczenie ma w ogóle tutaj sens. Jeżeli twoje poszczególne podklasy nie wyróżniają się
  • Odpowiedz
@Rev:

1. Doczytam. ;-)

2. Cholera, wiedziałem... -_-' ale nie wiem jak inaczej, będę musiał poszukać.

3. W moich prawdziwych klasach akurat ma: mam obiekty o wielu wspólnych funkcjach, reprezentują tabele bazy danych - podklasy mają dodatkowe zmienne reprezentujące kolumny ale ogólne operacje są takie same.
  • Odpowiedz
@Rev: btw. gdy zadaję dowolne pytanie, pokazując dowolny fragment kodu - zawsze mi ktoś wypomni wyciek pamięci... jeszcze chyba nie do końca czuję te pointery całe... :P
  • Odpowiedz
@losiul: ja już nie wiem czy chcę tej wolności, moje programy w Pythonie przynajmniej działały, a właśnie po nocy z programowaniem patrzę i 64 błędy do poprawy, co ja robiłem naćpany tymi energetykami to ja nawet nie... :D
  • Odpowiedz
@KrzaQ2: ja w ogóle nie wiem jak to jest używane bo potrzebuję tego operatora gdy dodaję mój obiekt do listy. Obiekt ma wartości const przypisywane podczas tworzenia. Operator chce zwrócić referencję do obiektu przyjmując stałą referencję... więc skąd mam wziąć obiekt do którego mam przypisać wartości obiektu z argumentu inaczej niż tworząc go w funkcji?
  • Odpowiedz
@KrzaQ2: tzn. GDZIE jest ten obiekt B? Ja bym użył czegoś jak std::swap gdybym chciał coś do czegoś przypisać ale gdzie to B? :P Edit: ja się z C++ zakolegowałem jakiś miesiąc temu więc mam braki... :P
  • Odpowiedz
@KrzaQ2: oh, teraz rozumiem! Nie wiem dlaczego patrzyłem na funkcję operatora tak jakby to była funkcja statyczna. 0o' Teraz z łatwością bym podmienił wartości jedna po drugiej gdyby nie to, że obiekty mają wartości const (numery identyfikacyjne) więc i tak muszę użyć konstruktora... czy "*this = Item(ref); return *this;" jest ok? Bo działa. ;-) Dzięki za pomoc!

Co do listy i wektora to używam obiektów Qt, a QVector to AFAIK
  • Odpowiedz
@smsrampage: W takim razie

*this = ref
powinno być wystarczające, w przeciwnym wypadku tworzysz (zbędny) obiekt tymczasowy po prawej stronie wyraƶenia, a dopiero ten obiekt kopiujesz to

*this
.
  • Odpowiedz
@KrzaQ2: czy istnieją przypadki gdzie nie jest to wystarczające? Bo naprawdę nie rozumiem po co dodawać tę jedną linijkę do wszystkiego... chyba jestem rozpieszczony ale to powinno być zautomatyzowane i domyślne tym bardziej, że nie pozwalają na użycie szablonu! :D
  • Odpowiedz