Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Überladen von Operatoren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.08.2006, 12:39 Uhr
Karldin Shinowa
Professional Noob


ich habe eine klasse foo und habe 2 Überladene+Operatoren die genau das selbe machen:


C++:
//in der klasse
int operator+(const foo& obj)
{...}

//global
int operator+(const foo& obj1,const foo&obj2)
{...}



wie geht es also das ein aufruf

C++:
cout<<foo(3)+foo(4);


nicht zu nem Konflikt der beiden führt und der compiler sich für eine entscheidet?
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.

Dieser Post wurde am 21.08.2006 um 12:40 Uhr von Karldin Shinowa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.08.2006, 12:43 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja wenn du das innerhalb der klasse schreibst, verdeckt der klassenoperator den globalen. ganz einfach, außerhalb kommt der compiler nicht in versuchung den klassenoperator zu nehmen, warum auch, also auch kein problem.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.08.2006, 12:54 Uhr
Karldin Shinowa
Professional Noob


In dem Fall is es besser nur den in der Klasse oder gibt es Fälle wo man beide haben sollte??
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.08.2006, 13:19 Uhr
stephanw
localhorst


Wenn beide im Prinzip das Gleiche tun, sollte man nur eine Funktion dafür haben. Falls sie verschiedene Dinge tun, sollte man seinen Entwuf ändern ;-)

Ich handhabe es so: ein Operator, der ein Objekt ändert (z.B. "+=") ist ein Member. Einer, der wie "+" zwei konstante Objekte nimmt und ein neues erzeugt, ist dann global bzw. außerhalb der Klasse, aber im gleichen Namespace.

Vielleicht könnte Dein Entwurf noch etwas modifiziert werden, indem der operator+(const Foo&, const Foo& auch ein Foo zurückgibt. Um aus einem Foo ein int zu machen, kannst Du einen (Member-) operator int() anbieten oder eine (Member-) Funktion toInt(). Ist Geschmacksache, ich finde es logischer, wenn bei einer Addition der gleiche Typ rauskommt (vorrausgesetzt, das Modell gibt das her, das wäre z.B. beim Skalar-Produkt zweier Vektoren natürlich nicht so).
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 21.08.2006 um 13:21 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: