Archiv verlassen und diese Seite im Standarddesign anzeigen : Grundsätze OOP -> noob
Hallo,
ich hätte mal ne grundsätzliche Frage.
Wann genau soll ich mehrere Klassen schreiben für ein Projekt? Ich weiß nicht genau wo ich trennen soll ...
UNd wann sollte man dann auch neue files *.cpp anlegen also mehrere cpp files in einem Projekt haben?
sollte ich grundsätzlich für jede klasse ein eigenes file anlegen ?
Zusätzlich würde mich interessieren wie ich dann dateninformationen von einer klasse in der anderen anwenden kann also wie ich informationen zwischen den klassen austauschen kann ???
Eure Tipps sind mir sehr hilfreich .... ich suche zwar weiterhin im netz aber bis jetzt komme ich nohcn icht auf einen grünen Zweig.
Dankeeuch vilemals
peschmae
07-10-2005, 16:01
Wann genau soll ich mehrere Klassen schreiben für ein Projekt? Ich weiß nicht genau wo ich trennen soll ...
Naja, das ist wohl *die* Frage die die Welt beschäftigt ;)
Solange das ganze nicht all zu kompliziert wird: Immer dann wenns irgend eine logische Einheit ergibt die du vernünftig Kapseln kannst (jetzt mal OOP im Sinne von vererben aussen vor gelassen).
Halt möglichst so dass die Klasse nur so gross ist dass du einigermassen den Überblick behalten kannst (und nicht nur jetzt wo du das schreibst sondern auch später mal).
UNd wann sollte man dann auch neue files *.cpp anlegen also mehrere cpp files in einem Projekt haben?
sollte ich grundsätzlich für jede klasse ein eigenes file anlegen ?
Eigentlich würde ich das schon. (Ausnahmen gibts natürlich immer ;))
Zusätzlich würde mich interessieren wie ich dann dateninformationen von einer klasse in der anderen anwenden kann also wie ich informationen zwischen den klassen austauschen kann ???
Das kommt wieder sehr darauf an - es gibt da jede Menge Möglichkeiten und für jeden Fall ist eine recht gut geignet. Manchmal auch keine - und manchmal mehrere.
Eines der Schlagwörter wenns um so Themen geht sind "Design Patterns" - die versuchen auf eben jene Fragen eine einigermassen allgemein verwendbare Rezeptartige Antwort zu finden.
z.B. da gibts eine Übersicht http://home.earthlink.net/~huston2/dp/patterns.html
Aber das ganze ist halt eher etwas theoretisch - viel Lesen meine ich. Wirklich schlau draus wirst du wohl erst wenn du das auch anwendest - d.h. selber Zeugs schreibst und feststellst was schlau ist und was nicht.
MfG Peschmä
ui danke danke.
naja.......ich habe momentan das problem einfach nur eine Methode in einer anderen klasseaufzurufen..
ich meine muss ich nicht zuerst einefach eine INstanz der Klasse erzeugen und dann auf dieser Instanz die Methode aufrufen ?
Wäre nett wenn jemand Zeit hätte undeinfach nur so im schnellen den code ala...
Class1:: . . . hinbatzt....für euch sicher kein Problem ;o)
Danke
hier mein versuch der einfach nicht klappen will:
Header:
#ifndef GENERATE_H
#define GENERATE_H
class QFile;
class Generate
{
Q_OBJECT
public:
Generate();
~Generate();
private:
//Variables
QFile* file;
};
#endif // GENERATE_H
die klasse die aufgerufen werden soll:
#include <generate.h>
#include <qfile.h>
Generate::Generate()
{
QFile file( "script.txt" );
}
Generate::~Generate()
{
}
und nun der aufruf aus einer methode einer ganz anderen klasse:
#include <generate.h>
.
.
.
Gen Generate();
tja die fehlermeldung lautet:
. . . Keine Regel vorhanden um das target generate.cpp welches von generate.o benötigt wird zu erstellen . . .
anda_skoa
08-10-2005, 14:49
Ich meine muss ich nicht zuerst einefach eine INstanz der Klasse erzeugen und dann auf dieser Instanz die Methode aufrufen ?
Im Normalfall ja. Es gibt auch Methoden die keine Daten der Instanz brauchen und daher ohne benutzbar sind, sogenannte statische Methoden (Keyword static)
Mal ein einfaches Beispiel
class C1
{
public:
void foo();
static void foo2(); // kann ohne Instanz von C1 benutzt werden
};
class C2
{
public:
void bar();
private:
C1 c1;
};
void C1::foo()
{
cout << "C1::foo" << endl;
}
void C1::foo2()
{
cout << "C1::foo2" << endl;
}
void C2::bar()
{
cout << "C2::bar" << endl;
c1.foo();
C1::foo2(); // nur mit Angabe der Klasse, ohne Benutzung von Instanz c1
}
Zu deinem Beispiel:
Q_OBJECT brauchst du nur in einer QObject Subklasse, hier ist es eher hinderlich.
und nun der aufruf aus einer methode einer ganz anderen klasse:
Gen Generate();
Da fehlt der Typ der Variable Gen
Generate Gen;
// oder
Generate Gen();
. . . Keine Regel vorhanden um das target generate.cpp welches von generate.o benötigt wird zu erstellen . . .
Das ist ein Buildfehler, d.h. vielleicht existiert die Datei generate.cpp nicht, oder nicht in diesem Verzeichnis oder ist nicht im Projekt.
Ciao,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.