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

Zapętlanie tworzenia nowego obiektu.

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
132 wizyt
pytanie zadane 18 września 2020 w C i C++ przez Mateusz Żaba Nowicjusz (150 p.)

Witam. Zrobiłem zadanie domowe z pierwszego odcinka obiektowego c++ z kanału "pasja informatyki". Chciałem ulepszyć program o tworzenie więcej obiektów niż dwa. W tym celu postanowiłem stworzyć pętlę, która pomogłaby tworzyć dowolną ilość obiektów. Natomiast program po stworzeniu pętli pobiera tylko dwie zmienne i kończy pracę. Gdy program był napisany w wersji nie obiektowej, pętla działała bez problemu. Natomiast po zmianie kodu na obiektowy występuje ten problem.

kod pliku:  main.cpp

#include <iostream>
#include "samochod.h"

using namespace std;


int main()
{
    int i=1;
    while(i<=5){
    Samochod s[i];
    s[i].wczytaj();
    cout<<endl;
    s[i].wypisz();
    cout<<endl;
    i++;
    }
    if(i==6){
        cout<<"Baza danych samochodow tymczosowo jest pelna!";
    }

    return 0;
}

  kod pliku: samochod.cpp

#include <iostream>
#include "samochod.h"

using namespace std;

void Samochod::wczytaj()
    {
        cout<<"Podaj marke samochodu:";
        cin>>marka;

        cout<<"Model samochodu:";
        cin>>model;

        cout<<"Rocznik:";
        cin>>rocznik;

        cout<<"Przebieg:";
        cin>>przebieg;
    }



    void Samochod::wypisz()
    {
    cout<<"Marka:"<<marka<<endl;
    cout<<"Model:"<<model<<endl;
    cout<<"Rocznik:"<<rocznik<<endl;
    cout<<"Przebieg:"<<przebieg<<endl;
    }

kod pliku:  samochod.h

#include <iostream>


using namespace std;

class Samochod
{
    public:
    string marka;
    string model;
    int rocznik;
    int przebieg;

    public:
    void wczytaj();
    void wypisz();
    void sprawdz();
};

Nie rozumiem jaki błąd popełniam i na co zwrócić większą uwagę.

1 odpowiedź

0 głosów
odpowiedź 18 września 2020 przez Oscar Nałogowiec (27,890 p.)
wybrane 18 września 2020 przez Mateusz Żaba
 
Najlepsza
    while(i<=5){
    Samochod s[i];
    s[i].wczytaj();

Za każdym obiegiem pętli tworzysz coraz większą tablicę na stosie, a potem odwołujesz się do elementu za końcem tej tablicy.

komentarz 18 września 2020 przez Mateusz Żaba Nowicjusz (150 p.)

Dziękuję, naprawiłem problem. Przed pętlą zdefiniowałem tablice o nazwie "s" i wielkości 6 znaków. Teraz pętla zamiast tworzyć coraz większą tablicę to dodaje do tablicy odpowiednie wartości. Wszystko pięknie działa. Dziękuję za nakierowanie! smileyenlightened

#include <iostream>
#include "samochod.h"

using namespace std;


int main()
{
    int i=1;
    int s[6];
    while(i<=5){
    Samochod s[i];
    s[i].wczytaj();
    cout<<endl;
    s[i].wypisz();
    cout<<endl;
    i++;
    }
    if(i==6){
        cout<<"Baza danych samochodow tymczosowo jest pelna!";
    }

    return 0;
}

 

komentarz 19 września 2020 przez Oscar Nałogowiec (27,890 p.)
Chyba coś jest dalej nie tak. To deklaracja tablicy Samochod[] powinna znajdować się przed pętlą. W kodzie, który pokazałeś są dwa różne obiekty o nazwie s. Ten w pętli przysłania ten z zewnątrz, więc w sumie nic się nie zmieniło.

Podobne pytania

+1 głos
2 odpowiedzi 100 wizyt
pytanie zadane 8 marca 2022 w C# przez xLipeq Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 190 wizyt
pytanie zadane 3 lutego 2019 w JavaScript przez jared Gaduła (3,620 p.)
0 głosów
0 odpowiedzi 832 wizyt
pytanie zadane 31 lipca 2016 w C i C++ przez Pac Plus Mądrala (5,560 p.)

90,401 zapytań

139,014 odpowiedzi

311,515 komentarzy

60,082 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...