Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 06.11.2008, 21:09 Titel: operator überladung |
|
|
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 |
|
|
fast hawk Senior JLI'ler
Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 06.11.2008, 21:25 Titel: Re: operator überladung |
|
|
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 |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 06.11.2008, 21:38 Titel: |
|
|
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 07.11.2008, 20:50 Titel: |
|
|
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 |
|
|
|