Ist es möglich, mehrere Klassen in nur einer CPP-Datei zu definieren?

7

Ich arbeite an einem Projekt für die Schule und der Lehrer besteht darauf, dass der gesamte Code in eine .cpp-Datei (für eine leichtere Einstufung seinerseits) geht. Ich würde gerne mehrere Klassen innerhalb dieser Datei definieren. Werde ich dabei irgendwelche Probleme bekommen?

    
Chad 07.12.2009, 17:49
quelle

11 Antworten

25

Es gibt keine Regel, der du folgen musst (wie in Java). Sie können Klassen in beliebig benannten Dateien (neben dem Suffix) platzieren und benennen.

Aber es ist eine andere Frage, ob das gute Praktiken sind (es ist nicht!).

    
RED SOFT ADAIR 07.12.2009, 17:51
quelle
9

Ja, das kannst du. Dies ist leicht überprüfbar.

%Vor%     
Brian R. Bondy 07.12.2009 17:53
quelle
6

Es gibt kein Problem beim Schreiben mehrerer Klassen in eine einzelne Datei. Es ist nur eine Frage des Wartungsstils.

    
aJ. 07.12.2009 17:51
quelle
5

Sie können mehrere Klassen perfekt deklarieren und in derselben Datei definieren.

Sie müssen jedoch vorsichtig sein, wenn eine Klasse von einer anderen abhängt, die später kommt. Wenn eine Klasse A Mitglied einer anderen Klasse B sein soll, benötigt der Compiler seine vollständige Deklaration (damit er seine Größe kennt), und Sie müssen sie höher in die Datei einfügen. Wenn dieses Member jedoch nur ein Zeiger ist (dessen Größe unabhängig von der Größe der Klasse ist, auf die verwiesen wird), genügt eine einfache Vorwärtsdeklaration der angegebenen Klasse.

Beachten Sie, dass mit dem #include -Mechanismus so ziemlich alles passiert: Der Präprozessor wird alle enthaltenen Dateien in die kompilierte Datei "kopieren". Für den Compiler ist es genauso.

    
Carl Seleborg 07.12.2009 17:54
quelle
4

Normalerweise sollten Sie nur mehrere Klassen in eine einzige Datei einfügen, wenn ...

  1. Die Klassen sind sehr eng miteinander verbunden. Wenn z. B. eine Klasse ihren eigenen Iterator definiert, dann ist es möglicherweise angebracht, diese Iterator-Klasse in dieselbe Datei wie die Klasse zu stellen, mit der sie iteriert wird.

  2. Eine der Klassen ist für den öffentlichen Verbrauch bestimmt, und die verbleibenden Klassen werden verwendet, um sie zu implementieren. Z. B. gilt dies, wenn Sie das Idiom "pimpl" verwenden, wobei das einzige Mitglied, das die öffentliche Klasse enthält, ein Zeiger auf die private Klasse ist. In diesem Fall ist es möglicherweise angebracht, die privaten / versteckten Klassen in die Quelldatei einzufügen, die der öffentlichen Klasse entspricht, die sie verwendet.

In beiden Fällen sollte die Entscheidung, ob die Klassen "öffentlicher Helfer" (z. B. Iterator) und "privater Helfer" (z. B. pimpl) in dieselbe Quelldatei oder eine andere Quelldatei gesetzt werden sollen, einmal für ein ganzes Projekt getroffen werden und folgte konsequent.

    
Edward Loper 07.12.2009 18:00
quelle
3

Just Skalierbarkeit / Wartbarkeit Probleme;) Es gibt keine strengen Regeln darüber.

    
gorsky 07.12.2009 17:53
quelle
3

Nein. Sie werden nicht in Schwierigkeiten geraten. In C ++ können Sie mehrere Klassen innerhalb einer einzigen Datei definieren.

    
arhuaco 07.12.2009 17:53
quelle
3

Sie werden keine Probleme haben, mehrere Klassen in einer einzigen Datei zu definieren.

Es ist keine besonders gute Praxis für Produktionssysteme, aber das ist kein Problem für Hausaufgaben

    
Liz Albin 07.12.2009 17:54
quelle
3

Ja, du kannst. Dies muss unterstützt werden, da sonst keine verschachtelten Klassen erstellt werden können.

%Vor%     
RC. 07.12.2009 17:56
quelle
2

Die Frage kommt von der Java / C # -Stil-Quelldarstellung. In C ++ ist das Quellcode-Layout sehr unterschiedlich. Eine Quelleinheit / "cpp-Datei" / könnte so viele Deklarationen verarbeiten, wie Sie einfügen möchten. Es ist jedoch keine gute Strategie nötig, da Sie irgendwann anderen Klassen sagen müssen, wie Sie mit Ihren Klassen umgehen sollen. In C ++ kann eine Klasse einen separaten Definitions- und Deklarationsabschnitt haben und Sie können sie in verschiedenen Dateien ablegen. Die Definition der Klasse wird von anderen Quelldateien mit # include-Anweisungen gemeinsam genutzt, sodass Sie diese Klassen in jedem Szenario verwenden können, in dem die Definition benötigt wird. Wenn Sie mit Klassen arbeiten, die nur in einer Quelldatei verwendet werden, können Sie sie direkt in den Quelldateien verbergen. Wenn Sie sie jedoch mit anderen Klassen verbinden möchten, müssen Sie die Definition in eine Header-Datei einfügen.

Es könnte Ihnen helfen, die Kompilierungsgeschwindigkeit zu verbessern - besonders wenn Sie vorkompilierte Header verwenden, aber vorsichtig, weil pch-s nicht Teil des C ++ - Standards ist und jeder Compiler sie anders behandelt! - und die Flexibilität Ihres Codes. Ihr Lehrer sollte sich dieser Tatsachen bewusst sein ...

    
progician 07.12.2009 18:01
quelle
2

Ja, Sie könnten es ohne Probleme tun. entweder mehrere Klassen oder verschachtelte Klassen.

    
Steve Zhang 07.12.2009 18:57
quelle

Tags und Links