operator << überladen

drpingoo

Erfahrenes Mitglied
Hallo zusammen!

Ich hätte da ne Frage zum Überladen des Operators <<. Und zwar so, dass man folgendes schriben kann: CC << "hello" << "world" ,wobei CC ein Klassenobjekt ist. Bis jetzt bin ich aber nur auf folgendes gestossen: cout << CC und als Code geschrieben etwas in diese Richtung :

PHP:
ostream& operator<<(ostream& Stream, const tBruch& B)
{
    return Stream << B.GetZaehler() << "/" << B.GetNenner();
}


Kann ich anstatt ostream auch einfach den Klassennamen verwenden? Aber dann ist es kein ostreamobjekt mehr...

lg
 
Was willst du denn genau machen? Man kann das problemlos machen (was du da willst), is nur die Frage ob das der sinnvollste/schnellste/einfachste/beste weg ist ;)
 
Also die ganze Aufgabenstellung geht so. Und mithilfe von count soll die Operatorenüberladung gemacht werden, damit es so funktioniert wie vorhni. Dazu hab ich auch noch eine Frage. Was macht die Fkt. count genau? Ich habe eben diese Unteraufgabe übersprungen, aber die Lösung mit der Überladung sollte diese Fkt. auch beinhalten.

Gegeben sei die Klasse CharCounter. Diese zählt das Auftreten von einzelnen Characters
innerhalb von Strings. Die Strings deren Characters gezählt werden sollen, werden mit der
Funktion count(…) übergeben. Das Array counts zählt das Auftreten der einzelnen
Zeichen. Die Häufigkeit eines Zeichens lässt sich mit der Funktion getCount(…) ermitteln.
PHP:
class CharCounter {
private:
int* counts;
char first;
char last;
public:
CharCounter(char start=’a’, char stop=’z’); //start must be smaller than stop
~CharCounter();
virtual void count(const char* str);
int getCount(char c) const
{
if (c>=first && c <= last) {
return counts[c - first];
} else {
return 0;
}
};
};
Beim Konstruktor wird ein zusammenhängender Bereich (gemäss ASCII) von Characters
definiert, die jeweils einzeln gezählt werden sollen. Nachfolgend ist die Implementation des
Konstruktors angegeben:
PHP:
CharCounter::CharCounter (char start, char stop) {
first = start;
last = stop;
int s = (int)stop – (int)start + 1;
counts = new int[s];
for (int i=0; i<s; i++) counts[i] = 0;
}
Folgendes Aufrufbeispiel diene dem Verständnis:
CharCounter CC(’a’,’z’); //Initialisiert Zähler für Zeichen a bis z
CC.count(“hello“);
CC.count(“world“);
std::cout << CC.getCount(’l’); //gibt „3“ auf derKonsole aus
 
Hi.

Falls ich dich richtig verstanden habe:
C++:
CharCounter& CharCounter::operator<< (const char* s) {
  this->count(s);
  return *this;
}
Gruß
 
Ich glaub schon... Also dann sollte man so etwas schreiben können CC << "hello" << "hi" wieso muss man da nicht über ostream gehen? oder gilt das nur für cout selbst und nicht für den <<-Operator?
 
Ich glaub schon... Also dann sollte man so etwas schreiben können CC << "hello" << "hi" wieso muss man da nicht über ostream gehen? oder gilt das nur für cout selbst und nicht für den <<-Operator?
ostream ist auch nur eine Klasse für die der operator<< definiert ist. Der Operator hat doch sonst nichts mit der Klasse zu tun, warum sollte man dort einen Ausgabestream benötigen?

Gruß
 
Gut, ja nein, das war meine Frage, weil das bei den sonstigen Beispielen, die ich gesehen habe immer vorkam. Danke :) Was macht die count Fkt. aber genau eigtl? Ich komme da bei der Formulierung der Aufgabenstellung nicht wirklich draus.
 
Was macht die count Fkt. aber genau eigtl? Ich komme da bei der Formulierung der Aufgabenstellung nicht wirklich draus.
Ist doch eigentlich ganz eindeutig formuliert. :confused:

Sie zählt von dem eingegebnen String für jedes Zeichen welches in dem Intervall (start, end) liegt die Häufigkeit. Das siehst du doch an dem Beispiel... :confused:

Gruß
 
Ah jetzt verstehe ich, den Unterscheidn zwischen count und getCount. count zählt die Häufigkeit jedes Buchstaben und getCount einen spezifischen, je nachdem, welchen man verlangt. Gut, dann programmier ich das mal, danke.

lg
 
Zurück