Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » frage zu datentyp

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
08.04.2005, 15:09 Uhr
cmos



Hallo,
habe das hier in einer Übung gehabt. Der Verantwortlich konnte mir
das aber auch net näher erläutern.

C++:
class komplex
{
       private:
            double reteil;
            double imteil;
       public:
            komplex(double,double);
            komplex add(komplex p)
}
komplex komplex::add(komplex p)
{
    return komplex(reteil+=a.reteil,imteil+=a.imteil);
}



An wen gibt das return etwas zurück?
Und weshalb kann ich in main nicht

C++:
komplex z1(1,2);komplex z2(1,1)
cout << z1.add(z2);


aufrufen?
Wenn ich komplex add(...) schreibe erkennt der Compiler automatisch
das ich damit einen eigenen Datentyp erstelle(?)

Gruß,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.04.2005, 15:36 Uhr
Frodenius



nujo, eine frage zuerst: wieso wird in der funktion add(komplex p) eigentlich nicht dieses p verwendet, sondern ein undefiniertes a?

aber jetzt zu deinen fragen:
-das return gibt natürlich an den zurück von dem die funktion aufgerufen wurde...
-die funktion, die genauso heißt wie die klasse, ist der konstruktor, sprich er erzeugt ein neues
komplex-objekt und das wird dann zurückgegeben!

std::cout kann mit diesem objekt nichts anfangen!
--
NI! ...and thanks for all the fish!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.04.2005, 15:43 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von cmos:
Hallo,
habe das hier in einer Übung gehabt. Der Verantwortlich konnte mir
das aber auch net näher erläutern.

C++:
komplex komplex::add(komplex p)
{
    return komplex(reteil+=a.reteil,imteil+=a.imteil);
}



An wen gibt das return etwas zurück?




Meiner Meinung nach ganz miserabler Code:
die add Method verändert das Object, also bei "z1.add(z2)" wird z1 verändert und gleichzeitg wird ein neues Object erzeugt, welches dann den gleichen Wert wie z1 nach der Addition hat.
Hier sind meiner Meinung nach zwei Routinen zu einer Vermischt worden:
1. ein AddTo, welches zu einer Zahl eine weitere Addiert
2. ein Add, welches Zwei Zahlen addiert und eine neue Zahl erstellt.

Die Method macht praktisch ein möglichst unperformantes AddTo; denn obiger Code wäre erffizienter mit:

C++:
komplex& komplex::add(komplex p)
{
    reteil+=a.reteil; imteil+=a.imteil;
    return *this;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.04.2005, 15:57 Uhr
Th



Außerdem sollte der Parameter "const &" sein, um unnötiges Erzeugen eines temp. Objektes (der komplex-Konstruktor wird dabei ja sonst aufgerufen), zu vermeiden,
also

C++:
komplex& komplex::add(const komplex &a) // damit der Compiler nicht meckert, nehme ich mal hier a statt p
{
    reteil += a.reteil;
    imteil += a.imteil;
    return *this;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.04.2005, 18:15 Uhr
cmos



Hallo und Danke,

das a hab ich natürlich vergessen. Sollte auch ein p sein.
Habe das jetzt mit operatoren überladen probiert.
Was ist denn angebrachter, mit friend funktion oder einfach so ?
bzw. was genau ist der unterschied.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.04.2005, 10:41 Uhr
Th



Der Unterschied zwischen friend Operator und direkter Operaotr-Überladung in einer Klasse besteht in den Parametern.
Innerhalb einer Klasse kann man z.B. für den + Operator nur ein Argument angeben, d.h. das erste Argument ist automatisch ein Objekt der Klasse. Bei einer friend-Funktion kann man auch die Parameter tauschen, also z.B.

C++:
friend MyClass operator + (int x, const MyClass& y);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.04.2005, 11:18 Uhr
ao

(Operator)



Zitat von cmos:
Habe das jetzt mit operatoren überladen probiert.
Was ist denn angebrachter, mit friend funktion oder einfach so ?
bzw. was genau ist der unterschied.

Für eine "vollständige" Implementierung gibts da keine Wahl, sondern man braucht beides. Beispiel:

C++:
komplex x (1, 2); // 1 + 2i
cout <<  x + 2; // dies braucht komplex::operator + (int n)
cout << 2 + x; // dies braucht ::operator + (int n, const komplex & rx);


ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.04.2005, 11:28 Uhr
~cmos
Gast


Ok,
danke schön..

Ciao
 
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: