JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=afd48c5f27047dab4b97a138205ac5e3Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

operator überladung

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 06.11.2008, 22:09    Titel: operator überladung Antworten mit Zitat

hallo,

ich habe eine klasse geschrieben und den "=" operator überladen:

CPP:
class BigInteger
{

   private:

      std::vector<bool> Bitfolge;

      void Create(int zahl) {...}
      

   public:

      BigInteger operator= (int zahl)
      {
         this->Create(zahl);
         return (*this);
      }

   
      
};



wenn ich in der main funktion jetzt schreibe:

Code:

BigInteger zahl;
zahl = 5;


funktioniert alles, wenn ich aber schreibe:

Code:

BigInteger zahl = 5;


sagt er, er könne int nicht in BigInteger konvertieren (C2440).


Warum geht das nicht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fast hawk
Senior JLI'ler



Anmeldedatum: 15.07.2005
Beiträge: 237
Wohnort: Freiburg
Medaillen: Keine

BeitragVerfasst am: 06.11.2008, 22:25    Titel: Re: operator überladung Antworten mit Zitat

Soweit wie ich weiß wird bei initalisieren nicht der Operator sondern der Konstruktor aufgerufen! D.h. du bräcuhtest noch einen Konstruktor
Code:

BigInteger(int Zahl) { this->Create(zahl); }

_________________
Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.11.2008, 22:38    Titel: Antworten mit Zitat

Jo, fast hawk hat absolut recht. Es bleibt einem bei C++ eben nicht erspart ständig sowohl Kopierkonstruktoren als auch Kopierzuweisungsoperatoren zu schreiben. Oft ist es sinnvoll gemeinsame Funktionalität in eine private Memberfunktion (z.B. Copy(...)) auszulagern (in deinem Fall existiert die mit Create(...) ja praktisch schon).

Ach übrigens. Es wäre besser den Zuweisungsoperator eine konstante Referenz zurückgeben zu lassen. Eine Kopie zu erstellen erfordert nunmal immer ein bisschen Rechenzeit und ist normalerweise nicht nötig. Also sähe das dann so aus:
Code:
      const BigInteger& operator= (int zahl)
      {
         this->Create(zahl);
         return (*this);
      }

_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 07.11.2008, 21:50    Titel: Antworten mit Zitat

Dr. Best hat Folgendes geschrieben:
...Ach übrigens. Es wäre besser den Zuweisungsoperator eine konstante Referenz zurückgeben zu lassen. Eine Kopie zu erstellen erfordert nunmal immer ein bisschen Rechenzeit und ist normalerweise nicht nötig...
Jep, vor allem weil die Klasse BigInteger schon vom Namen her darauf hindeutet. Einen std::vector, der für "Big*"-Objekte genutzt wird, braucht erst recht viel Zeit zum Kopieren. ;P

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum