• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Klasy C++. Tworzenie w pętli obiektów.

Object Storage Arubacloud
0 głosów
1,350 wizyt
pytanie zadane 17 maja 2018 w C i C++ przez giedymin33 Początkujący (290 p.)

Witam, mam taką klasę:

class PlytaCD
{
public:
    char tytul[15];
    char wykonawca[20];
    char wydawca[15];
    int rok;
    float cena;
}

Chcę stworzyć tablicę, do której  będę  dodawał  obiekty tej klasy.

Metoda mniej więcej będzie wyglądać tak:

void PlytaCD::Dodawanie()
{
    cout<<"Dodaj tytul: "<<endl;
    cin>>obiekt[counter]->tytul;

[...]

}

Chcę, żeby  to użytkownik dodawał dane do płyty.

Jeszcze jest taki problem. W tej płycie powinna być możliwość dodania  do 25  utworów.  Chcę utworzyć klasę  Utwór.

[1]. Klasa  Utwór powinna  być zagnieżdżona w klasie PlytaCD? Jak  to wykonać  poprawnie?

[2]. Jak stworzyć tablicę obiektów? Nie ma  z góry określonej  ilości płyt. Chodzi tu o  oszczędność pamięci. Czytalem ze można : PlytaCD tab_obiektow[]; Albo za pomocą wskaźnika PlytaCD* tab_obiektow=new PlytaCD[];

[3]. Kiedy będzie tworzony  obiekt tej klasy?

[4]. Przy uzupełnianiu przez użytkownika treści płyty(przy 1 krotnym wywołaniu, dodaje się 1 płytę), po przejściu przez metodę PlytaCD::Dodawanie, chcę aby użytkownik określił ilość piosenek znajdujących się w tej płycie.

Proszę o jakieś sugestie.

 

3 odpowiedzi

+1 głos
odpowiedź 17 maja 2018 przez Perseusz Bywalec (2,190 p.)
edycja 17 maja 2018 przez Perseusz

[1]. Nie widzę żadnego powodu by cokolwiek zagnieżdzać. Płyta a utwór to raczej całkiem inne obiekty, z tego co wiem to zagnieżdżanie klas to specyficzne sytuacje ale ekspertem nie jestem...

[2]. Też coś czytałem o wskaźnikach, ale o ile to c++ łatwiej ci będzie użyć std::vector - w skrócie: to dynamiczna tablica, która z każdą zmianą wielkości zmienia swoje położenie w pamięci. W każdym razie radzę poczytać jakiś poradnik czy cóś: http://cpp0x.pl/kursy/Kurs-STL-C++/Kontener-tablicy-std-vector/119

[3]. Nie wiem czy o to ci chodzi ale tutaj - wektor klasy Utwór jako argument klasy Płyta:


class Utwor{}

class PlytaCD{
    std::vector  <Utwor> utwory;
}

[4]. ? O co chodzi z tym określaniem..? Bo jak masz na myśli to ile chce dodać to 'cin' i jakaś 'zmienna' chyba wystarczny

 

edit: mój błąd w kodzie :p

komentarz 17 maja 2018 przez Perseusz Bywalec (2,190 p.)

wektor działą jak zwykła tablica i do obiektów możesz się odwoływać tak

//tak
utwory[0];
//albo tak
utowy.at(0);

 

komentarz 17 maja 2018 przez giedymin33 Początkujący (290 p.)

@Perseusz, A jest możliwość zadeklarowania tych obiektów np. w kolejce?

 

komentarz 17 maja 2018 przez Perseusz Bywalec (2,190 p.)

@giedymin23 tu takie uproszczenie jak to działa ale i tak bym polecił głębsze zapoznanie się z tematem, sam się na tym z początku troche głowiłem

/*HPP*/
include <vector>

class Utwor {
    Utwor(); //konstruktor
    int N;
    std::string id;
    
    void odtworz();
}

class Cd{
    vector <Utwor> utwory; //wektor jako argument klasy->obiektu

    void dodaj();
}

/*CPP*/

class Cd::dodaj(){
    Utwor nowyUtwor; 
    //tworzy obiekt
    Utwor nowyUtworDuo; 
    //tworzy drugi obiekt
    
    utwory.push_back(nowyUtwor);
    //dodaje obiekt do wektora na koniec
    utwory.push_back(nowyUtworDuo);
    //dodaje drugi obiekt do wektora na koniec

    for (int i = 0; i < utwory.size(); i++){
        utwory[i].odtworz();
    }//odtwarzanie funkcji wszystkich obiektów w wektorze
    
    utwory.pop_back();
    //usuwasz obiekt, który jest na końcu
}

Obiekty w wektorze możesz też sortować za pomocą jego metod np: swap, w bibliotece <alghoritms> jest też jakiś 'sort'.

Tutaj masz jeszcze wiki, nieraz korzystałem jak z vectorami zaczynałem:

https://pl.wikibooks.org/wiki/C%2B%2B/Vector

0 głosów
odpowiedź 17 maja 2018 przez chucksqll Stary wyjadacz (12,930 p.)

1.

class PlytaCD
{
...
  class Utwor
  {
   ...
  };
};

2. Możesz skorzystać z jakiegoś kontenera np. vector

vector <PlytaCD> Playlista;

I później po prostu dodawać kolejne płyty metodą push_back.

http://cpp0x.pl/dokumentacja/standard-C++/vector/819 tutaj trochę więcej o vector'ze.

Albo użyć tak jak mówisz dynamicznej tablicy, choć według mnie lepiej nada się do tego kontener.

int n;//ile plyt w kolekcji
cin>>n;//pobierasz ile
PlytaCD Playlista=new PlytaCD[n];//tworzy tablice n elementów

3. Kiedy użyjesz konstruktora.

4. W ciele funkcji dodawanie możesz użyć pomysłu z podpunktu 2, coś takiego:

void PlytaCD::Dodawanie()
{
    cout<<"Dodaj tytul: "<<endl;
    cin>>obiekt[counter]->tytul;
    cout<<"Ile utworow ma miec plyta?"<<endl;
    int n;
    cin>>n;
    Utwor Piosenka;
    while(n--)
    {
     //pobierasz dane do obiektu klasy Utwor 
     Playlista.push_back(Piosenka);//wrzucasz ja do kontenera
    }
 
}

 

komentarz 17 maja 2018 przez giedymin33 Początkujący (290 p.)
A jest możliwość zadeklarowania tych obiektów np. w kolejce?
komentarz 17 maja 2018 przez chucksqll Stary wyjadacz (12,930 p.)
Tak. Wygląda to tak prawie samo tyle, że zamiast Vector piszesz queue, dziala to nieco inaczej  od vectora ale rowniez  spelni zadanie.
0 głosów
odpowiedź 17 maja 2018 przez giedymin33 Początkujący (290 p.)
A jest możliwość zadeklarowania tych obiektów np. w kolejce?
komentarz 17 maja 2018 przez j23 Mędrzec (194,920 p.)
Co Ty masz z tą kolejką?

Podobne pytania

0 głosów
1 odpowiedź 462 wizyt
0 głosów
1 odpowiedź 476 wizyt
pytanie zadane 27 maja 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 1,546 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez mIKY Nowicjusz (120 p.)

92,579 zapytań

141,431 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...