Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » class << p1 << p2 << p3;

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
04.08.2003, 17:37 Uhr
manpen



Hallo !

wie realisiere ich es, dass ich einer Klasse per "<<"-Operator meherere Parameter (z.B. wie bei cout << "Hallo" << " " << "Welt" << endl übergeben kann ?

Gruß
ManPen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.08.2003, 17:56 Uhr
typecast
aka loddab
(Operator)


So weit ich weiß brauchst du das granicht extra festzulegen. C++ wertet das automatisch aus. Wenn du den <<-Operator definiert hast, müsste es eigentlich funktionieren.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.08.2003, 17:58 Uhr
0xdeadbeef
Gott
(Operator)


Operatorüberladung ist das Zauberwort. Nimm zum Beispiel das hier als einfaches beispiel

C++:
//myclass.h
#include <string>

class my_class {
protected:
    std::string catstr;
public:
    std::string get_string();

    //Jetzt darf der unten deklarierte operator<< auf private- und protected-
    //Elemente von my_class zugreifen
    friend my_class &operator<<(my_class&, std::string);
};

//Deklaration des Operators.
my_class &operator<<(my_class &, std::string);



C++:
//myclass.cpp
#include "myclass.h"

std::string my_class::get_string() { return catstr; }

//Implementation des Operators. Wichtig ist, dass die Instanz von myclass,
//die als Referenz übergeben wurde, auch als Referenz zurückgegeben wird.
//Dadurch kann man erst solche Dinge wie m << "bla" << "bli" << "blu"; machen
my_class &operator<<(my_class &mc, std::string str) {
    mc.catstr += str;
    return mc;
}



C++:
//main.cpp
#include <string>
#include "myclass.h"

int main() {
    my_class m;
    //Aufruf des Operators hier. Das Argument links von << ist der erste
    //Parameter der Operator-Funktion von oben.
    m << "Hello" << ", " << "World" << "!";
    std::cout << m.get_string() << std::endl;
}


Alles klar?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.08.2003, 18:14 Uhr
~manpen
Gast


Danke.

Ich hatte das auch schon mal mit Operator-Überladung versucht. Da hat es aber immer zum Fehler geführt ...

Aber jetzt das geht (wenn man #inlcude <iostream> nicht vergisst).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.08.2003, 18:16 Uhr
0xdeadbeef
Gott
(Operator)


oh, ups. my bad. Das kommt davon, wenn ich ständig in die Gegend kladde und das nicht vorher durch nen Compiler jage...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
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: