C++ Klassen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
rdg
Beiträge: 31
Registriert: 27.07.2007 15:10:56

C++ Klassen

Beitrag von rdg » 17.09.2007 10:09:42

Hi,

könnt Ihr mir bitte erklären :?
wozu und wann ich :

1.)
Zeiger- und Adress Klassen benötige.
2.)
eine mit new erstellte Klasse brauche
3.)
wie und wann ich in der Parameterliste von Methoden mit Klassen umgehe

Ich meine ich weiß ja was ein Zeiger und die Adresse ist, doch warum benötige ich diese und
in der Parameterliste wird mal ein Zeigerobjekt, mal die Adresse angegeben.

Bin Euch wirklich vielmals dankbar für eine Erklärung :!:, damit ich endlich dort durchsehe und auch endlich mal mit dem Probrogrammieren weiterkomme! :D
vielen Dank :!: :!: :!:

goecke
Beiträge: 289
Registriert: 12.01.2007 11:57:27

Re: C++ Klassen

Beitrag von goecke » 17.09.2007 13:19:08

Hi,

Ich kann leider kein komplettes Buch schreiben, die Fragen sind
ziemlich allgemein und grundlegend, aber vielleicht helfen Dir die
Antworden schon.

rdg hat geschrieben:Hi,

könnt Ihr mir bitte erklären :?
wozu und wann ich :

1.)
Zeiger- und Adress Klassen benötige.
was sind Zeigerklassen und was sind Addressklassen?

Zeiger sind Zeiger sind Zeiger. sie können z.B. auf einen int zeigen oder auf
eine Klasse zeigen.

Code: Alles auswählen

int * a;
CKlasse * b;
2.)
eine mit new erstellte Klasse brauche
mit new erstellt man keine Klassen man erzeugt ein Objekt der Klasse xyz.
(es ist ein wichtiger Unterschied)

mit

Code: Alles auswählen

b = new CKlasse(); 
erzeugt man ein Objekt der Klasse "CKlasse" welches nicht durch
den Runtime umgebung wieder freigegeben wird.
Du mußt selber es mit z.B.

Code: Alles auswählen

delete b;
wieder freigeben.

3.)
wie und wann ich in der Parameterliste von Methoden mit Klassen umgehe
in einer Parameterlist können
a) Zeiger auf Klassen stehen
b) Referenzen auf Klassen und
c) Klassen
d) einfache typen (int double,...)stehen.

wobei a) und b) (fast) äquivalent sind (ungefähr = Call by Reference), und bei c) das Objekt
Kopiert werden muss (Call by Value) und veränderungen nicht zurückkommen

Ich meine ich weiß ja was ein Zeiger und die Adresse ist, doch warum benötige ich diese und
in der Parameterliste wird mal ein Zeigerobjekt, mal die Adresse angegeben.
das ist z.T. Geschmacks- oder Geschwindigkeitsgründe.
Kopieren von Objekte braucht (bei großen Objekten) immer viel Zeit!



Bin Euch wirklich vielmals dankbar für eine Erklärung :!:, damit ich endlich dort durchsehe und auch endlich mal mit dem Probrogrammieren weiterkomme! :D
vielen Dank :!: :!: :!:


Ich will nicht überheblich klingen, aber Du scheinst sehr am Anfang deiner
Programmierlaufbahn sein, also solltest Du auch mal deinen Freund Google
nach

"Objektorientierte Programmierung"
"c++ Einführung"

befragen.

Oder du fragst IHN selbst, denn ER hat C++ erfunden:

Bjarne Stroustrup: "Die C++ Programmiersprache"

als Buch in jeder Bücherei / Buchladen zu finden.



HTH
Johannes

rdg
Beiträge: 31
Registriert: 27.07.2007 15:10:56

Beitrag von rdg » 17.09.2007 16:24:42

Ja,
doch wozu benötige ich z.B. eine Zeiger Klasse, bei einer char Variable versehe ich es ja, da man diese über einen Zeiger ändern kann, doch wozu bei Klassen?
Stimmt natürlich ein Objekt wird mit new erstellt, doch weshalb sollte ich eine Objekt mit new erzeugen, was habe ich davon?


Ich habe 4 Bücher über C++ und OOP doch finde ich in Ihnen nicht die Antwort darauf, sondern nur das und wie man es kann.

goecke
Beiträge: 289
Registriert: 12.01.2007 11:57:27

Beitrag von goecke » 17.09.2007 17:46:42

rdg hat geschrieben:Ja,
doch wozu benötige ich z.B. eine Zeiger Klasse, bei einer char Variable versehe ich es ja, da man diese über einen Zeiger ändern kann, doch wozu bei Klassen?
Ok, ein fiktives Beispiel:

eine Menge von Menschen soll modelliert werden
ein Mensch wohnt in einer Stadt.

also kann man folgende Lösung erstellen:

Code: Alles auswählen

Klasse Mensch : Name, Vorname, Geschlecht, Alter, Tel , Stadt  
Klasse Stadt   : Name, Bezirk , Einwohner, Fläche, Geo-Koordinaten,... 
jetzt wäre es ziemlich blöd eine Kopie der Stadt in jedem Objekt vom
Typ Mensch zu halten, es ändert sich z.B. die Einwohnerzahl, dann musst
du alle Objekte deiner Stadt finden und überall die Einwohner ändern.

in diesem Fall _kann_ man jedem Menschen einen Zeiger auf Stadt geben.
- jeder Mensch "kennt" seine Stadt"
- die Stadt als Objekt ist eine Identität
- weniger Speicherverbrauch
- hohe geschwindigkeit im zugriff von Mensch auf Stadt.
Stimmt natürlich ein Objekt wird mit new erstellt, doch weshalb sollte ich eine Objekt mit new erzeugen, was habe ich davon?
z.B. kannst du in einer Schleife aus der Datenbank die Städte einlesen objekte erstellen
und in eine Liste anhängen (welche du am ende des Programms natürlich löschen must)

Ohne Verwenden von new und Ptrlisten ginge das auch, aber IMHO muss mindestens
ein oder mehrmals ein Objekt kopiert werden.


Ich habe 4 Bücher über C++ und OOP doch finde ich in Ihnen nicht die Antwort darauf, sondern nur das und wie man es kann.
Dann schlag mal im OO-Buch über identität von Objekten nach. Jedes Semantische Objkt (eine Stadt)
darf nur 1 mal im Speicher existieren, alles andere gibt (meist) Probleme.

gruß
Johannes

PS:
Das Beispiel ist nur zur erklärung, im speziellen Fall würden 12 von 10 Programmieren das
anders implementieren ;-)

rdg
Beiträge: 31
Registriert: 27.07.2007 15:10:56

Beitrag von rdg » 17.09.2007 18:34:52

Also heißt das:

Stadt Bremen (...);
Mensch Meier(..., Stadt* Bremen);
ist genau die Stadt gemeint welche ich darüber erstellt habe,
und wenn ich:
Mensch Meier(..., Stadt Bremen);
schreiben würde, wäre es ein zweites Objekt Namens Bremen zu welchem Der mensch dann gehört?

un d vielen Dank Dir !!! :D

Antworten