Hi @thewizardofoz,
Na ja, was ist "übertrieben Objektorientiert"? Um sich die "objektorientierte Denkweise anzueignen" sollte man sich die drei Teilbereiche OOA/OOD und OOP einzeln anschauen.
Das Ihr ein C++ Projekt mit Klassen (OOP) erstellen sollt, hat doch sicherlich eine Vorlauf (OOA/OOD) gehabt? Oder wie seid Ihr auf die einzelnen Klassen gekommen?
Wenn Ihr dass schon nicht hattet, solltet Ihr doch zumindest einige Grunderfahrung in C++ haben, zumindest schon, wie man Klassen programmiert.
Und wie sehen denn die Anforderungen aus, habt ihr die denn schon erarbeitet? Eine Frage wäre, wenn z.B. Autos angelegt werden sollen, sollen die nur für einen Programmlauf existieren oder sollen die nach einem Neustart wieder verfügbar sein (speichern?).
Du brauchst also dedizierte Anforderungen die u.A. auch Prozessabläufe festlegen, wie z.B. "Es müssen Autos mit seine Attributen über eine Eingabemaske angelegt/gesucht/geändert/gelöscht werden können. Ein Löschen darf nur möglich sein, wenn nicht ...dies und das.
Fang also mit dem an, ohne das andere nicht funktioniert; m.M. das Auto.
Zu Deinen Fragen:
Eine Klasse nur mit Methoden würde ich nicht bauen, sondern einen Namespace benutzen.
Um ein Objekt der Klasse Buchung, die wohl so einige Attribute wie Datum, Referenz auf das zu buchende Auto etc. haben könnte, zu verwalten brauchst Du wie schon von Dir angedeutet, eine Buchungs-Verwaltungsklasse, einen Namen solltest Du dir noch ausdenken. Diese braucht keine speziellen Konstruktor, aber wohl so was wie eine Liste der Buchungen und Methoden diese Buchungen zu generieren/bearbeiten/stornieren etc. Auch wäre es schön, eine Auto für eine Buchung auswählen zu können, dafür wäre so was wie eine Autoverwaltungsklasse schön, die mir einfach mal die Autos anbietet u.s.w. Die Auto-Verwaltungsklasse wird dann nicht nur zum bearbeiten von Autos genutzt, sondern auch von der Buchungsverwaltungsklasse.
Wenn im weiteren Verlauf schon bekannt ist, dass Autos mit ihren Buchungen angezeigt werden sollen, ist eine Entscheidung fällig, ob ich bei der Anzeige eines Autos die Buchungen durchsuche, um diese anzuzeigen, oder gleich beim Anlegen einer Buchung im referenzierten Auto, nicht gleich eine Gegenreferenz von Nöten ist.
Noch ein Tip, mal die die Klassen auf und ziehe Verbindungen zwischen diese, welche Klasse Objekte anderer Klassen kennen muss, um arbeiten zu können.
Jede Klasse sollte nur sie selbst betreffende Attribute haben.
Jede Klasse sollte nur die Methoden haben, die sie selbst betreffen.
Auch eine Bearbeitungsmaske sollte eine Klasse sein, sie sollte Methoden der zu Bearbeitenden Klasse/n nutzen (stell Dir vor, du brauchst später eine andere Bearbeitungsmaske, die willst du doch nicht gänzlich neu Programmieren).
Sogar das Programm (Application) kann eine Klasse sein, die in der main aufgerufen wird.
Ich bin mir nicht sicher, ob das Dir hilft, stelle dann einfach spezifischere Fragen.