• 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.

VPS Starter Arubacloud
0 głosów
1,329 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ź 449 wizyt
0 głosów
1 odpowiedź 413 wizyt
pytanie zadane 27 maja 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 1,508 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez mIKY Nowicjusz (120 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...