Klassenübung, irgendwie begreif ichs wohl nich!



  • Hallo ihr da,

    ich lern grad bisschen c++, und bin bei klassen!
    nu is ne aufgabe: "Erstelle Klasse Book mit Attributen und Methoden, und lasse den Benutzer in einem Testprogramm beliebig viele Bücher anlegen"

    So, nun frag ich mich, wie mach ich das?
    Ein Buch ist ein Objekt, aber beliebig viele Bücher?
    Wie kann ich denn immer ein Objekt "aus dem nichts" entstehen lassen?

    Oder hab ich den Sinn nicht verstanden?



  • Ein Buch ist ein Objekt von Klasse "Book" - das hat unter anderem auch einen Konstruktor (bzw. sollte einen haben). Neue Bücher kannst du erzeugen, indem du diesen Konstruktor aufrufst.

    (und um "beliebig viele" Bücher zu verwalten, empfiehlt sich eine Containerklasse - da bietet C++ einige zur Auswahl)



  • NeÜbung schrieb:

    [...] Ein Buch ist ein Objekt, aber beliebig viele Bücher? [...]

    Na ist doch klar. Sind beliebig viele Objekte.

    class Buch { ... };
    
    int main()
    {
        Buch bibel;
        Buch uebungsBuch;
        Buch andereBuecher[10];
    
        return 0;
    }
    


  • ja schon klar, aber "beliebig viele" hat sich für mich angehört, das vorher überhaupt nicht bekannt ist, wieviele es werden könnten!

    Das bedeutet, das ich auch keine namen vergeben kann!

    Containerklassen?Soweit bin ich noch nicht!

    Also heißt das, das es schon irgendwo eine feste zahl geben muss?

    Oder wie wäre es mit einer klasse, die books verwaltet?
    Kann die neue objekte erzeugen? wenn ja wie?



  • Du koenntest den Benutzer fragen, wieviele Buecher er denn gerne anlegen moechte. Dann ein entsprechend grosses Array anlegen.



  • Hallo,
    wie wäre es mit der einfachsten aller dynamischen Datenstrukturen - der einfach verketteten Liste?

    struct BookList {
        Book book;
        BookList* next;
    };
    
    int main() {
        BookList* list = 0;
        BookList* appendPos = 0;
        while (irgendwas) {
            if (!list) {
                list = new BookList;
                appendPos = list;
                list.next = 0;
                // befülle list.book
            }
            else {
                appendPos->next = new BookList;
                appendPos = appendPos->next;
                appendPos->next = 0;
                // befülle book
            }
        }
        print(list);
        del(list);
    }
    
    void print(BookList* li) {
        while (li) {
            cout << l.book.name() << endl;
            li = li->next;
        }
    }
    
    void del(BookList* li) {
       while (li) {
           BookList* t = li;
           li = li->next;
           delete t;
       }
    }
    

    Das ist natürlich weder hübsch noch elegant noch getestet, aber als Beispiel vielleicht dennoch ausreichend.

    Sinnvoller wäre natürlich die Verwendung eines passenden Standardcontainers, wie std::vector.



  • hm.. das geht auch einfacher:

    int main() {
        while(bla) {
            if(userWillBuch()) 
                new Book;
        }
    }
    

    steht schließlich nichts davon, dass der Benutzer die Bücher auch irgendwann benuten will 🤡



  • life schrieb:

    hm.. das geht auch einfacher:

    int main() {
        while(bla) {
            if(userWillBuch()) 
                new Book;
        }
    }
    

    steht schließlich nichts davon, dass der Benutzer die Bücher auch irgendwann benuten will 🤡

    lol


Anmelden zum Antworten