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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren