Unbekannte Operartor-Überladung

Gast #2853249
Lesenswert?
• ▲
▼
Hallo Leute!

Ich arbeite gerade das Buch "Moderne C++ Programmierung" durch. In einem 
Beispiel ist eine Operatorüberladung zu sehen, die ich nicht verstehe. 
Es wird nicht erklärt wozu sie gut ist.
Diese Operatorüberladung ist als Methode in einer Klasse realisiert.
1
operator unsigned int () const {return actual;}

Wozu dient diese Opeatorüberladung bzw. welcher Operator wird hier 
überladen?
Ich danke euch im Voraus.

Schöne Grüße

Martin
Gast #2853369
Lesenswert?
• ▲
▼
Es geht um einen Ringbuffer. Ich weiß nicht, ob ich das ganze Beispiel 
hier öffentlich posten darf.

Ich verstehe nicht, warum der "unsigned int"-Operator in diesem Beispiel 
überladen wird und wann diese Überladung aufgerufen wird.

Darf ich hier dieses eine Beispiel öffentlich posten?
Gast #2853561
Lesenswert?
• ▲
▼
Na dann ;-)
1
#include <iostream>
2

3
class RingIndex
4
{
5
public:
6
explicit RingIndex(unsigned int s) : max(s), actual(0) {}
7

8
void inc()
9
{
10
if(actual == (max-1))
11
actual=0;
12
else
13
actual++;
14
}
15

16
RingIndex &operator++()
17
{
18
inc();
19
return *this;
20
}
21

22
RingIndex operator++(int)
23
{
24
RingIndex tmp(*this);
25
inc();
26
return tmp;
27
}
28

29
operator unsigned int () const {return actual;}
30

31
private:
32
unsigned int actual;
33
const unsigned int max;
34
};
35

36

37

38
int main()
39
{ using namespace std;
40

41
int array[3];
42
RingIndex r(3);
43

44
array[r++]=701;
45
array[r++]=702;
46
array[r++]=703;
47

48
cout << array[r++] << endl;
49
cout << array[r++] << endl;
50
cout << array[r++] << endl;
51
cout << array[r++] << endl;
52
cout << array[r++] << endl;
53
cout << array[r] << endl;
54

55
return 0;
56
}

Ausgabe des Programms:
1
701
2
702
3
703
4
701
5
702
6
703

Ich verstehe nicht, wann die "unsigned int"-Operatorüberladung zum Zuge 
kommt.
Was ich auch nicht verstehe, ist diese Zuweisung.
1
array[r++]=701;
Bei r++ wird im Prinzip die Methode mit dem ++-Operator aufgerufen. Was 
ich nicht verstehe ist, dass die überladene ++-Operator-Methode die 
Klasse zurückliefert und nicht einen Integerwert, der eigentlich für den 
Index des Feldes "array" nötig wäre. Wie kann das funktionieren?
Bzw. Was habe ich falsch verstanden ;-)  ?
Gast #2853575
Lesenswert?
• ▲
▼
Sven P. schrieb:
> Es wird der Cast-Operator überladen,

Konvertier-Operator.

Martin schrieb:
> Ich verstehe nicht, wann die "unsigned int"-Operatorüberladung zum Zuge
> kommt.
> Was ich auch nicht verstehe, ist diese Zuweisung.array[r++]=701;
> Bei r++ wird im Prinzip die Methode mit dem ++-Operator aufgerufen. Was
> ich nicht verstehe ist, dass die überladene ++-Operator-Methode die
> Klasse zurückliefert und nicht einen Integerwert, der eigentlich für den
> Index des Feldes "array" nötig wäre. Wie kann das funktionieren?

Die Antwort auf beide Fragen ergibt sich aus der Kombination beider. Der 
operator wird aufgerufen, wenn du irgendwo ein Objekt deiner Klasse 
einsetzt, wo ein unsigned int benötigt wird. De Wert, der da dann 
eingesetzt wird, wird über den Aufruf des Operators ermittelt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.