Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - Obiektowy C++ stuktury

Boshi 29 Kwi 2014 18:39 969 15
  • #1 29 Kwi 2014 18:39
    Boshi
    Poziom 12  

    Cześć, mam taki problem; Jak program który jest zapisany na strukturach przerobić na klasy- obiektowo? np mam zagnieżdżone 2 struktury jak to zapisac w klasie jako pole?

    Potrzebuje jakiegoś prostego przykładu bo nie wiem jak się za to zabrać, potem poleci z górki:)

    Np mamy coś takiego: {Jak to zamienic na pola klasy?}

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 15
  • #2 29 Kwi 2014 19:32
    rufek90
    Poziom 23  

    Struktura to coś w rodzaju klasy klasy, ale z innym poziomem dostępu i bez możliwości pisania w niej metod.

    Zatem u Ciebie można to zapisać jako klasa Uro, która zawiera jakieś tam pola dot. urodzin + zawiera obiekt klasy dane.

    Jeszcze ważna uwaga: w strukturach dane są publiczne, a w klasach domyślnie są private.

    Dawno w c++ nic nie pisałem, ale chyba bardzo nie pokręciłem :)

    0
  • #3 29 Kwi 2014 20:52
    Boshi
    Poziom 12  

    Tak teorie mniej więcej znam. Bardziej chodzi mi o przykład.

    Z tego co zrozumiałem, to można stworzyć klase uro z polami a potem obiekt dane? czy jak?

    0
  • #4 30 Kwi 2014 12:21
    mikkel
    Poziom 13  

    Nie chcę być niegrzeczny ale o google słyszałeś?
    Tam jest masa przykładów i opisów klas w C++.

    0
  • #5 30 Kwi 2014 16:26
    Boshi
    Poziom 12  

    Pomyśl trochę. Gdyby na google było jak zamienić zagnieżdżoną strukturę w klasy to bym nie tworzył wątku.

    0
  • #6 01 Maj 2014 19:39
    Boshi
    Poziom 12  

    Nikt nie pomoże?

    Coś takiego ?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #7 01 Maj 2014 21:33
    krru
    Poziom 32  

    Pamiętaj, że w class masz domyślnie dostęp private - więc musisz zadeklarować jawnie public, albo na początku, albo pola zostawić private i zrobić stosowne metody publiczne. Tablica obiektów przejdzie, jeśli dana klasa ma domyślny (bezparametrowy) konstruktor.
    Po za tym pomieszałeś zależności - to uro ma zawierac tablice osob a nie odwrotnie.

    0
  • #8 01 Maj 2014 21:39
    Boshi
    Poziom 12  

    Zaczynam gubić główny temat powoli...
    1 Pomieszałem w jakim sensie ?

    2 Czy sama deklaracja takiego czegoś jest poprawna ?

    3 Dlaczego kompilator krzyczy, że mam używać -> w ww. strukturze jeżeli odnoszę się do np pola rok? przecież -> pozwala odnieść się do wskaźnika a tutaj brak taktowego ?

    0
  • #10 04 Maj 2014 16:38
    Boshi
    Poziom 12  

    Dalej tego nie rozkminiam... już chyba wszystkiego próbowałem.. nawet przez tablicę przekazaną jako parametr i wyrzuca błąd;]

    Musi być tablica 10 płyty i 25 utworów, czyli wypełniamy np 2 płyty i 5 utworów.



    {request for member 'wypelnij' in 'Nowa', which is of non-class type 'Plyta [10]'|

    Poprawi to ktoś?

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #11 04 Maj 2014 19:52
    the_fifth_horseman
    Poziom 32  

    Próbujesz wywołać metodę klasy na tablicy obiektów a nie na jej elemencie.
    Funkcje wypelnij i wyswietl zaimplementowałeś jako metody instancji a próbujesz używać ich jakby były metodami statycznymi... ogólnie, kombinowałeś w dobrą stronę, ale z właściwą implementacją gorzej.

    Aktualnie jestem nieco zajęty, za jakąś godzinę - dwie spróbuję ci to poprawić.

    Dodano po 2 [godziny] 1 [minuty]:

    Spróbuj w ten sposób:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Zamiast tablic o statycznym rozmiarze zastosowałem wektory, dzięki temu można dowolnie dodawać i usuwać elementy bez sztywno narzuconego rozmiaru.

    Jeżeli poza klasą potrzebny ci jest dostęp do jej pól, lepiej użyj do tego akcesorów (funkcji pobierających lub ustawiających wartość pól) zamiast deklarować same pola jako publiczne.

    0
  • #12 04 Maj 2014 20:24
    Boshi
    Poziom 12  

    Tak twój program chyba działa. Choć szczerze mówiąc, nie mieliśmy klasy Vektor jeszcze, a też mi ciężko ją trochę zrozumieć nie korzystając z niej. Jeżeli mój nie zadziała to twój postaram się zrozumieć. Zresztą musimy mieć statyczne tablice - 10 na płytę i 25 na utwory.

    Jeszcze jak mógłbyś spojrzeć na wersje drugą mojego kodu- Teoretycznie działa wszystko jak powinno. Choć nie wiem czy to tak ma być.


    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #13 04 Maj 2014 22:07
    the_fifth_horseman
    Poziom 32  

    Boshi napisał:
    Tak twój program chyba działa. Choć szczerze mówiąc, nie mieliśmy klasy Vektor jeszcze, a też mi ciężko ją trochę zrozumieć nie korzystając z niej. Jeżeli mój nie zadziała to twój postaram się zrozumieć. Zresztą musimy mieć statyczne tablice - 10 na płytę i 25 na utwory.
    Vector to prościzna. Jeżeli kiedyś otarłeś się na zajęciach o tematykę stosów, kolejek i list powiązanych, to jest pokrewne.
    http://www.cplusplus.com/reference/vector/vector/

    Cytat:
    Jeszcze jak mógłbyś spojrzeć na wersje drugą mojego kodu- Teoretycznie działa wszystko jak powinno. Choć nie wiem czy to tak ma być.
    Minimalnie lepiej, ale nadal błędnie. Jeżeli tworzysz klasę utwory to metody odpowiedzialne za jej wyświetlanie i wypełnianie powinny należeć do niej, a nie być wbudowane w klasę plyta. plyta powinna tylko się do nich odwoływać, tak jak pokazałem.

    Podobnie wyświetlenie zawartości płyty - ilość scieżek jest w twojej wersji jednym z pól tej klasy, więc nie powinna być podawana jako argument.

    Ponieważ liczbę ścieżek użytkownik podaje dopiero wypełniając dane płyty, zakładanie że będzie znana uprzednio też jest błędne.

    Tu masz poprzednie rozwiązanie bez klasy Vector i z twoją klasą kolekcja:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #14 04 Maj 2014 22:43
    Boshi
    Poziom 12  

    Dzięki wielkie, przestudiuje to jeszcze ;)

    Ostatnie już pytanie, da radę pod to wsadzić jeszcze średnią cenę płyt?


    koniecznie muszę przestudiować te wskaźniki THIS i ogólnie coś poćwiczyć, bo mimo, że mój kod działa, to tak jak piszesz, jest kiepski :P

    0
  • #15 04 Maj 2014 23:25
    the_fifth_horseman
    Poziom 32  

    Boshi napisał:
    Ostatnie już pytanie, da radę pod to wsadzić jeszcze średnią cenę płyt?
    Da radę - musisz do klasy Plyta dorobić akcesor który poda ci cenę płyty a do klasy Kolekcja metodę, która będzie z niego korzystać do policzenia średniej. :)

    0
  • #16 05 Maj 2014 00:07
    Boshi
    Poziom 12  

    Dzięki wielkie za pomoc :)

    0