Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.08.2006, 13:03

Wie erstelle ich eine Kopie des aufrufenden Objektes?

Hallo zusammen,

Ich habe folgendes Problem.

Ich habe eine Methode einer Klasse die mit Hilfe des this Zeigers eine Kopie des aufrufenden Objekts erstellen soll. Nun bin ich mir nicht sicher ob meine Parameterübergabe stimmt.

Hier mal der Beispielcode:

Test(const Test& v); // Kopierkonstruktor

Test Test::testfunktion()const
{
Test temp(*this);
return temp;
}

Kann ich mit dem oben stehenden Konstruktor so ein Objekt erzeugen?

Falls nicht wäre ich auch für Tipps dankbar, wie man das elegant löst.
Es soll eine Methode der Klasse werden, wenn es geht, keine globale Funktion.

Danke schonmal für die Hilfe

MfG

Abiet

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

2

14.08.2006, 13:36

Ich denke du versucht singletons zunutzen oder?

Du kannst es so machen das du eine statisches(static) Objekt der Klasse anlegst und es dann per Test::Instance Methode rufen kannst.

Also Methoder haißt:

C-/C++-Quelltext

1
Test Instance()


Diese gibt dir eine Statisches Objekt wieder.

Hier die mögliche(wieder nicht fehlerfreie Implementierung:

C-/C++-Quelltext

1
2
3
4
5
Test Test::Instance()
{
 static Test TestObj;
 return TestObj;
}


Um diese Methode zunutzen musst(um einem Objekt oder direkt eine Methode aufzurufen gehst du wie folgt(ungefähr) vor:

C-/C++-Quelltext

1
2
3
4
5
//Objekt:

Test TestObj=Test::Instance();

//Direkte Methode:

Test::Instance().IrgendeineandereMethode();


Das ist so im Stil von OOP für Dummies :)
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

14.08.2006, 14:42

@T-VIRUS:
Deine Antwort hat mit der Frage überhaupt nichts zu tun!

@Abiet:
Ja, du musst den Kopierkonstruktur nur noch implementieren.

4

14.08.2006, 15:20

C-/C++-Quelltext

1
2
3
4
Test Test::testfunktion()const
{
  return *this;
} 


sollte schon reichen, sonst kopierst du einmal umsonst...

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

5

14.08.2006, 16:34

Zitat von »"David Scherfgen"«

@T-VIRUS:
Deine Antwort hat mit der Frage überhaupt nichts zu tun!

@Abiet:
Ja, du musst den Kopierkonstruktur nur noch implementieren.


Hmm okay hatte die Frage falsch verstanden!
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

14.08.2006, 19:26

Zitat von »"WarMuuh!!"«

C-/C++-Quelltext

1
2
3
4
Test Test::testfunktion()const
{
  return *this;
} 


sollte schon reichen, sonst kopierst du einmal umsonst...

Es muss aber ohnehin auch noch der =-Operator implementiert sein, wenn ich mich nicht vertue...?
Kommen Sie nie mit einem Schwert zu einer Schießerei.

7

14.08.2006, 19:37

nich unbedingt, da bei:

C-/C++-Quelltext

1
2
Test a;
Test b = a.testfunktion();


der kopierkonstruktor aufgerufen wird.
da kann mans auch gleich so machen:

C-/C++-Quelltext

1
Test b = a;


(nicht so bei

C-/C++-Quelltext

1
2
3
Test a;
Test b;
b = a.testfunktion();

)

Werbeanzeige