Objekt einer Klasse übergeben (Pointer?)

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Objekt einer Klasse übergeben (Pointer?)

Beitrag von MoMo » Fr Jun 29, 2018 9:18 am

Hallo,

ich möchte einer Klasse ein Objekt übergeben, welches ich in der Main erstellt habe, mein Code bisher:
Konstruktor

Code: Alles auswählen

ExampleClass::ExampleClass(Objekt objekt): var(objekt){...}
Main

Code: Alles auswählen

int main(int argc, char** argv) {
...
Objekt objekt(argv[1]);
ExampleClass class(objekt);
...
return 0;
}
Header

Code: Alles auswählen

class ExampleClass {
public:
 ExampleClass(Objekt objekt);
...
private:
Objekt var;
...
};
ich möchte gerne mit dem Objekt "objekt" in der Klasse ExampleClass arbeiten - der Aufruf (Syntax) ist so noch nicht korrekt, das weiß ich, jedoch frag ich mich auch was der beste Weg ist. Benutze ich am besten einen Pointer? ich denke schon, jedoch bin ich mir nicht ganz bewusst wie. Das Grundprinzip eines Zeigers ist mir auch bewusst, nur mangels Erfahrung mit den Pointern bin ich etwas verwirrt.

Das Objekt sollte auch in der ganzen Klasse ExampleClass zur Verfügung stehen, daher hab ich gedacht, dass in der Variable "var" zu speichern, jedoch ist die Variable "var" auch vom Typ Objekt und dieses Objekt hat keinen Default-Konstruktor und benötigt immer eine Zeichenkette als Übergabeparameter)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Objekt einer Klasse übergeben (Pointer?)

Beitrag von Xin » Fr Jun 29, 2018 9:41 am

MoMo hat geschrieben:ich möchte gerne mit dem Objekt "objekt" in der Klasse ExampleClass arbeiten - der Aufruf (Syntax) ist so noch nicht korrekt, das weiß ich, jedoch frag ich mich auch was der beste Weg ist.
Aktuell sagt Dein Code, dass Du eine Kopie des Objektes erstellen möchtest. Wenn Du genau das Objekt benutzen willst, musst Du darauf referenzieren.
MoMo hat geschrieben:Benutze ich am besten einen Pointer? ich denke schon, jedoch bin ich mir nicht ganz bewusst wie. Das Grundprinzip eines Zeigers ist mir auch bewusst, nur mangels Erfahrung mit den Pointern bin ich etwas verwirrt.
In C++ gibt es zwei Möglichkeiten: Die Referenz: (Object &) und den Zeiger (Object *). Beide zeigen auf das Objekt. Der Zeiger darf aber auch "nullptr" sein, die Referenz muss auf ein Objekt referenzieren. Wenn Deine Klasse also auch valide ist, ohne ein Objekt zu referenzieren, dann ist der Zeiger die richtige Wahl, wenn sie ein Objekt referenzieren muss, dann drückst Du das durch die Referenz aus. Du kannst eine Referenz nicht überschreiben. Sie wird einmal gesetzt und dann ist das wie eine lokale Variable.
MoMo hat geschrieben:Das Objekt sollte auch in der ganzen Klasse ExampleClass zur Verfügung stehen, daher hab ich gedacht, dass in der Variable "var" zu speichern, jedoch ist die Variable "var" auch vom Typ Objekt und dieses Objekt hat keinen Default-Konstruktor und benötigt immer eine Zeichenkette als Übergabeparameter)
Ich denke, Du kommst mit der Referenz ins Geschäft:

Code: Alles auswählen

class ExampleClass {
public:
ExampleClass(Objekt & objekt);
...
private:
Objekt & var;
...
};
Eine Referenz behandelst Du wie eine normale Variable - intern ist es aber ein Zeiger auf das Objekt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: Objekt einer Klasse übergeben (Pointer?)

Beitrag von MoMo » Fr Jun 29, 2018 10:37 am

Ahhh Danke! Ja Referenz war das Stichwort, eine Kopie hätte mir später evtl Probleme gemacht und eine Kopie wollte ich ja auch nicht.

Code: Alles auswählen

...
Objekt objekt(argv[1]);
ExampleClass class(objekt);
...
Wenn ich das richtig verstehe, wird jetzt die Variable (objekt) als Referenz übergeben
mit (&objekt) die Adresse als Referenz oder ?!

‘ExampleClass’ was not declared in this scope
Das ist die Fehlermeldung bei der Zeile "ExampleClass class(objekt);" nach Änderung in der Klasse
ctor

Code: Alles auswählen

ExampleClass::ExampleClass(Objekt & objekt):var(objekt{...})
header

Code: Alles auswählen

...
public:
ExampleClass(Objekt & objekt);
...
als auch

Code: Alles auswählen

private:
Objekt & var;
Hab ich irgendwas vergessen?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Objekt einer Klasse übergeben (Pointer?)

Beitrag von Xin » Fr Jun 29, 2018 11:23 am

MoMo hat geschrieben:‘ExampleClass’ was not declared in this scope
Das ist die Fehlermeldung bei der Zeile "ExampleClass class(objekt);" nach Änderung in der Klasse
ctor

Code: Alles auswählen

ExampleClass::ExampleClass(Objekt & objekt):var(objekt{...})
Hab ich irgendwas vergessen?
Ich verstehe das mal als

Code: Alles auswählen

ExampleClass::ExampleClass(Objekt & objekt):var(objekt){...}
und vergessen hast Du vermutlich das #include, um den Header einzubinden. Genauer weiß ich das auch nicht, da ich den Quelltext ja nicht vollständig einsehen kann.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

MoMo
Beiträge: 26
Registriert: Mo Mai 07, 2018 9:49 am

Re: Objekt einer Klasse übergeben (Pointer?)

Beitrag von MoMo » Fr Jun 29, 2018 11:47 am

boah ich bin ja manchmal so unfähig. danke Xin, es war der vergessene include....alles klappt, Programm läuft und macht das was es machen soll

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Objekt einer Klasse übergeben (Pointer?)

Beitrag von Xin » Fr Jun 29, 2018 11:58 am

MoMo hat geschrieben:boah ich bin ja manchmal so unfähig. danke Xin, es war der vergessene include....alles klappt, Programm läuft und macht das was es machen soll
Wir haben alle mal so angefangen. :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten