enum - wer hat Recht? Compiler oder Buch ;)



  • das geilste was ich bisher im Buch gesehen habe:

    #include <iostream>
    using namespace std;
    
    template<int N>
    class Fakultaet
    {
    public:
    enum{value = N*Fakultaet<N-1>::value};
    };
    
    template<>
    class Fakultaet<0>
    {
    public:
    enum{value = 1};
    };
    
    int main()
    {
    const int x = Fakultaet<6>::value;
    cout << x <<endl;
    cin.get();
    return 0;
    }
    


  • Vertexwahn schrieb:

    das geilste was ich bisher im Buch gesehen habe:

    #include <iostream>
    using namespace std;
    
    template<int N>
    class Fakultaet
    {
    public:
    enum{value = N*Fakultaet<N-1>::value};
    };
    
    template<>
    class Fakultaet<0>
    {
    public:
    enum{value = 1};
    };
    
    int main()
    {
    const int x = Fakultaet<6>::value;
    cout << x <<endl;
    cin.get();
    return 0;
    }
    

    wo ist daran das problem?
    könnte breymann sein, der sich an metaprogrammierung wagt, obwohl das buch für anfänger ist.



  • Was der Bauer nicht kennt, das frisst er net :p



  • Vertexwahn schrieb:

    Der Autor ist der Meinung das ein Destruktor die Überladung des Bit-Komplement-Operators darstellt

    Kannst du mal das exakte Zitat angeben? Wenn er nämlich von Überladung des ~-Zeichens sprechen sollte, hätte er recht.



  • Überladung des ~-Zeichens sprechen sollte, hätte er recht.

    tut er aber nicht - zu faul jetzt zu zitieren - er schreibt ausdrücklich der ~Operator wird überladen



  • Vertexwahn schrieb:

    Überladung des ~-Zeichens sprechen sollte, hätte er recht.

    tut er aber nicht - zu faul jetzt zu zitieren - er schreibt ausdrücklich der ~Operator wird überladen

    🙄



  • wo ist daran das problem?

    nirgends, bis auf das fehlende template<>, das ich ergänzt habe und der zu kurz geratenen Erklärung



  • Vertexwahn schrieb:

    er schreibt ausdrücklich der ~Operator wird überladen

    Und dein Problem damit ist genau was? Ist doch vollkommen iO.



  • #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();
    }
    


  • Das Beispiel steht so im Buch und der Autor spricht in diesem Zusammenhang von der Überladung des ~ Operators?



  • 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



  • 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.



  • ~ ist ein Operator, genauer gesagt ein unärer Operator.

    das bestreitet auch niemand 😉



  • Nunja, es kam aber so rüber, dass dich das stören würde.

    Vertexwahn schrieb:

    der Autor spricht von der Überladung des ~ Operators - nicht von der Überladung des ~-Zeichens



  • Wenn ich den ~-Operator überladen will dann mache ich folgendes:
    operator~()

    Ein Destruktor stellt keine Überladung des ~-Operators, sondern nur eine Überladung des ~-Zeichens dar



  • Vertexwahn schrieb:

    Ein Destruktor stellt keine Überladung des ~-Operators, sondern nur eine Überladung des ~-Zeichens dar

    Ein dtor stellt überhaupt keine Überladung dar. Weder des ~ Operators noch des ~ Zeichens. 😉



  • 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



  • Ich sollte wohl nochmal was dazu sagen. Ü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.



  • Bashar schrieb:

    Überladen heißt allgemein, dass ein Symbol in unterschiedlichen Kontexten verschiedene Bedeutungen hat

    komisch, ich kenne überladen nur im zusammenhang mit funktionsnamen. du würdest also sagen, das symbol "stuhl" ist überladen, weil es die unterschiedlichen begriffe sitzmöbelstuhl und kackestuhl bedeutet? kannst du mir textbeispiele zeigen, wo das wort "überladung" so allgemein gebraucht wird? ich hab's nämlich noch nie gehört, daß man einzelne eichen, die teil eines namens sind, überladen nennt, nur weil sie in verschiedenen namen vorkommen.
    wenn du sagst
    ~Klasse()
    und
    operator~()
    würde ~ überladen, dann sage ich mit gleicher berechrigung
    Volkard
    und
    Vogelsberg
    würde das V überladen.
    ich hoffe, du mißtraust meiner V-überladung. ich sehe keinen untersachied zu deiner ~-überladung.



  • @Volkard

    komisch, ich kenne überladen nur im zusammenhang mit funktionsnamen

    siehe erklärung von Bashar - ich meine das gleiche

    ansonsten kann ich mich nur noch mal wiederholen:

    Wenn ich den ~-Operator überladen will dann mache ich folgendes:
    operator~()

    Ein Destruktor stellt keine Überladung des ~-Operators, sondern nur eine Überladung des ~-Zeichens dar


Anmelden zum Antworten