enum - wer hat Recht? Compiler oder Buch ;)
-
Vertexwahn schrieb:
Das kommt darauf an, ob man die Überladung als Konzept oder aus Sicht der Programmiersprache sieht - aber immerhin hast du eingesehen, dass ein Destruktor keine Überladung des ~-operators darstellt
Wieso eingesehen? Ich habe nie etwas dergleichen gesagt. Du hingegen glaubst, der Autor hätte das behauptet, aber bisher keine Beweise dafür gebracht. Vielleicht solltest du das nächste mal besser lesen, bevor du dich darüber lustig machst.

Vertexwahn schrieb:
das war mit
myself schrieb:
Ein Destruktor stellt keine Überladung des ~-Operators, sondern nur eine Überladung des ~-Zeichens da
gemeint - habs halt nicht so schön formulieren können

Dann schreib es das nächste Mal nicht so zweideutig. ZB hättest du "weitere Verwendung" statt dem Wort Überladung nehmen können. Ein dtor steht jedenfalls in keiner Beziehung zu einer Überladung, auch nicht vom ~ Zeichen. Was Überladung in C++ bedeutet, kannst du im Standard nachlesen.
Kapitel 13
-
Wieso eingesehen?
Darum:
groovemaster schrieb:
Vertexwahn schrieb:
Das Beispiel steht nicht im Buch - der Autor spricht von der Überladung des ~ Operators - nicht von der Überladung des ~-Zeichens, aber das ist jetzt nur unsinnige Haarspalterei
Nein. Der Autor hat vollkommen Recht. ~ ist ein Operator, genauer gesagt ein unärer Operator. Siehe dazu ISO/IEC 14882:2003(E) - 5.3.1 Unary operators.
Ich hab verstanden, dass du der Meinung bist, dass der Destruktor die Überladung des ~-Operators darstellt, was unsinn ist
Du hingegen glaubst, der Autor hätte das behauptet, aber bisher keine Beweise dafür gebracht.
Heute Abend tippe ich mal die Stelle ab

-
Aus Buch:
S. 239
"Das vom Konstruktor dynamisch erzeugte Array soll bei Programmende aus dem Speicher gelöscht werden. Dies macht eine Elementmethoder [<-steht so im buch ;)], die als Destruktor, bezeichnet wird; er ist das Gegenstück zum Konstruktor. Er wird gekennzeichnet durch den überladenen Bit-Negationsoperator und das Schlüsselwort delete."hier gefällt mir das "überadenen Bit-Negationsoperator" nicht
S. 241
"Ein Destruktor hat die Form
~Typ()
wobei hier der Bit-Negationsoperator (auch Bit-Komplement-Operator genannt) überladen wird"hier gefällt mir "überladen wird" nicht...
-
Er macht zwar den Eindruck, als würde er das meinen, was ich gesagt habe, aber wenn man in C++ von Operatorüberladung spricht, aber nicht Operatorüberladung meint, ist das zumindest mal grob irreführend.
-
am Buch gibts auch noch andere Sachen, die mich stören:
Häufig wird behauptet, dass C99 und C++ keinen boolschen Datentyp kennen, was Unsinn ist.Auf Seite 84 steht:
"Zu beachten ist, dass durch die Deklaration einer Pointervariablen noch
kein Speicherplatz reserviert worden ist. Dies geschieht erst durch die
Zuweisungen:"Variablendeklarationen sind immer auch Definitionen es sei denn, der
Deklaration ist ein extern vorangestellt.D. h. der Name einer Zeigervariablen wird bei einer Deklaration immer mit
einem Speicherplatz verbunden.Oder war damit gemeint, dass ein Zeiger nach
seiner Definition nicht mit einen sinnvollen Wert belegt ist...? Sollte man
vielleicht in der nächsten Auflage ändern.S. 105 ist in der Übung 6.1 eine Klammer zuviel! Todesstrafe! Wenn etwas in einem Buch nicht passieren darf, dann ist es ein Klammer zuviel! *g*
<<(p-(p-7)));
müsste heißen:
<<(p-(p-7));Das Bild auf Seite 120 (Abb. 7.4 Call by Reference) ist etwas verwirrend - als Leser erwarten man Links den Anfangszustand und rechts den Endzustand. Dann hätte man rechts für a den Wert 1202 und für b 1200. Der bidirektionale Pfeil der das vertauschen Der Werte darstellt kann missverstanden werden.
Auf Seite 130 steht: "Ebenso wenig können Felder der Speicherklasse auto in C initialisiert werden; dies ist nur bei der Speicherklasse static möglich."
Nach dem aktuellen Standard ist das nicht mehr so – Felder kommen immer gleich auch initialisiert werdenS. 141: "Neu in der Norm ist der einstellige +-Operator. Mit seiner Hilfe kann bei gleichberechtigten Operatoren eine bestimmte Reihenfolge erzwungen werden. Soll im Term ab/c zuerst die Division ausgeführt werden, kann man schreiben:
a+(b/c)
Hier erscheint die Reihenfolge trivial, ist es aber in komplexeren Fällen nicht."man hätte das gleiche Ergebnis auch mit a*(b/c) erreicht...
ich hab das mit dem einstelligen +-Operator zum ersten mal gehört - ich glaube irgendwie, dass sich das der Autor nur einbildet...S. 143: „Obwohl C/C++ keine expliziten BOOLEschen Variablen kennt“
Nach aktuellen C und C++ Standard gibt es einen Booleschen TypS. 170:
„#include <iostream>
using namespace std;
enum wert {sieben,acht,neun,bube,dame,koenig,zehn,as};
enum farbe {karo,herz,pik,kreuz};
int main()
{
for (farbe f=karo; f<=kreuz; f++)
for (wert w=sieben; w <= as; w++)
{
switch(f)
{
case karo : cout<< "Karo";break;
case herz : cout<< "Herz";break;
case pik : cout<< "Pik";break;
case kreuz : cout<< "Kreuz";break;
}
switch(w)
{
case sieben: cout<< "-Sieben\n"; break;
case acht: cout<< "-Achter\n"; break;
case neun: cout<< "-Neuner\n"; break;
case bube: cout<< "-Bube\n"; break;
case dame: cout<< "-Dame\n"; break;
case koenig: cout<< "-Koenig\n"; break;
case zehn: cout<< "-Zehner\n"; break;
case as: cout<< "-As\n"; break;
}}
return 0;
}“Das Beispiel funktioniert nicht weil die +-Operatoren der enums nicht überladen sind
S. 234: „Auch der Cast oder Typumwandlungs-Operator double soll so überladen werden, sich er den Dezimalwert des Bruchs ergibt:“
Satzbau?
S. 241
„Es [CopyCtor] wird in folgenden drei Fällen aufgerufen…“Wird auch z. B. bei throw Exception() aufgerufen – ich wäre vorsichtig mit solchen Aussagen, wann genau der CopyCtor aufgerufen wird
S. 239
"Das vom Konstruktor dynamisch erzeugte Array soll bei Programmende aus dem Speicher gelöscht werden. Dies macht eine Elementmethoder [<-steht so im buch ], die als Destruktor, bezeichnet wird; er ist das Gegenstück zum Konstruktor. Er wird gekennzeichnet durch den überladenen Bit-Negationsoperator und das Schlüsselwort delete."hier gefällt mir das "überadenen Bit-Negationsoperator" nicht
S. 241
"Ein Destruktor hat die Form
~Typ()
wobei hier der Bit-Negationsoperator (auch Bit-Komplement-Operator genannt) überladen wird"hier gefällt mir "überladen wird" nicht...
#include <iostream>
using namespace std;class A
{
public:
~A()
{
cout<<"ich bin die Ueberladung des ~-Zeichens"<<endl;
}void operator~()
{
cout<<"ich bin der ueberladene ~-Operator"<<endl;
}
};int main()
{
{
A objekt;
~objekt;
}
cin.get();
}Überladen heißt allgemein, dass ein Symbol in unterschiedlichen Kontexten verschiedene Bedeutungen hat, so wie das ~ mal den Destruktor anzeigt und mal den Bitkomplementoperator darstellt.
Ein Destruktor stellt keine Überladung des ~-Operators, sondern nur eine Überladung des ~-Zeichens dar.
-
Oh je.

-
Methoder?!

Wie heißt denn das Buch?
-
Irgendwie ist mir auch die Zielgruppe des Autors nicht klar... das Buch heißt Grundkurs C++, aber schaut irgendwie nach einen Buch von einen Mathematiker aus, der sich Hoppymäßig mit C++ beschäftigt - er hätte lieber ein Buch über Numerik oder sowas schreiben sollen - naja egal...
-
Vertexwahn schrieb:
groovemaster schrieb:
Vertexwahn schrieb:
Das Beispiel steht nicht im Buch - der Autor spricht von der Überladung des ~ Operators - nicht von der Überladung des ~-Zeichens, aber das ist jetzt nur unsinnige Haarspalterei
Nein. Der Autor hat vollkommen Recht. ~ ist ein Operator, genauer gesagt ein unärer Operator. Siehe dazu ISO/IEC 14882:2003(E) - 5.3.1 Unary operators.
Ich hab verstanden, dass du der Meinung bist, dass der Destruktor die Überladung des ~-Operators darstellt
Ne, dann hast du das falsch verstanden. Ich hab mich lediglich auf "~ Operator" bezogen, und dann ist Überladung absolut iO. Von einem Destruktor war hier überhaupt keine Rede.
Er wird gekennzeichnet durch den überladenen Bit-Negationsoperator und das Schlüsselwort delete.
Das ist grob gesagt Müll. Zwar nicht generell falsch, aber aus Sicht von C++ und wie Überladung dort definiert ist, vollkommen irreführend.
Auf Seite 84 steht:
"Zu beachten ist, dass durch die Deklaration einer Pointervariablen noch
kein Speicherplatz reserviert worden ist. Dies geschieht erst durch die
Zuweisungen:"Variablendeklarationen sind immer auch Definitionen es sei denn, der
Deklaration ist ein extern vorangestellt.Andersrum. Definitionen sind immer auch Deklarationen. Und durch Zuweisung wird kein Speicher reserviert, das erfolgt schlichtweg durch die Definition.
"Ebenso wenig können Felder der Speicherklasse auto in C initialisiert werden; dies ist nur bei der Speicherklasse static möglich."
Ja, das hatten wir letztens erst in irgend einem Thread. Auch so eine Sache, die missverständlich rüberkommt. Meint der nun implizite oder explizite Initialisierung? Da er "können" schreibt, klingt das nach explizit, und dann ist das Unsinn.
S. 141: "Neu in der Norm ist der einstellige +-Operator. Mit seiner Hilfe kann bei gleichberechtigten Operatoren eine bestimmte Reihenfolge erzwungen werden. Soll im Term ab/c zuerst die Division ausgeführt werden, kann man schreiben:
a+(b/c)
Hier erscheint die Reihenfolge trivial, ist es aber in komplexeren Fällen nicht."man hätte das gleiche Ergebnis auch mit a*(b/c) erreicht...
ich hab das mit dem einstelligen +-Operator zum ersten mal gehört - ich glaube irgendwie, dass sich das der Autor nur einbildet...Naja, Einbildung ist wohl auch eine Bildung. Bei manchen Leuten wohl die Einzige...
Ich schreib in Zukunft:a*-(-(b/c))Ist mir irgendwie sympathischer. Hoffentlich wird im nächsten Standard kein *- Operator eingeführt.

-predator- schrieb:
Methoder?!
Sollte vielleicht einfach nur Methode heissen. Sowas soll ja durchaus mal vorkommen. Wenn ich mir aber die anderen Stellen so anschaue, passiert das wohl öfter.

Gibt es eigentlich einen Bereich für nicht empfehlenswerte Bücher auf C++.de?

-
Ich hab mich lediglich auf "~ Operator" bezogen, und dann ist Überladung absolut iO
Jetzt habe ich dich verstanden
- hab mit dem Wort Operator immer sofort auf Operatorüberladung geschlossen...