virtual



  • 82kolu schrieb:

    Aber ein fehler findest du nicht? weil ich will schon das es so funktioniert

    Der Code ist unvollständig und nicht mal syntaktisch korrekt, was soll man da bitte groß finden? Und warum willst du unbedingt das langsamere und für diesen Zweck überhaupt nicht konzipierte virtual verwenden? Erkläre dich doch bitte mal..



  • cooky451 schrieb:

    82kolu schrieb:

    Aber ein fehler findest du nicht? weil ich will schon das es so funktioniert

    Der Code ist unvollständig und nicht mal syntaktisch korrekt, was soll man da bitte groß finden? Und warum willst du unbedingt das langsamere und für diesen Zweck überhaupt nicht konzipierte virtual verwenden? Erkläre dich doch bitte mal..

    Weil das die Aufgabenstellung ist.



  • 82kolu schrieb:

    Weil das die Aufgabenstellung ist.

    Die Aufgabenstellung besagt also, dass du bei einer Vektorklasse den operator == mit virtual implementieren sollst? Oder ist die Aufgabe nicht eher, dass du irgendein Anwendungsbeispiel für virtual finden sollst? (Falls ersteres zutreffen sollte versichere mir bitte, dass du nicht studierst, sonst fange ich gleich an zu weinen.)



  • cooky451 schrieb:

    82kolu schrieb:

    Weil das die Aufgabenstellung ist.

    Die Aufgabenstellung besagt also, dass du bei einer Vektorklasse den operator == mit virtual implementieren sollst? Oder ist die Aufgabe nicht eher, dass du irgendein Anwendungsbeispiel für virtual finden sollst? (Falls ersteres zutreffen sollte versichere mir bitte, dass du nicht studierst, sonst fange ich gleich an zu weinen.)

    ich studiere 😉
    aber mathe wenn dir das hilft. und ja ersteres.
    also tips 😛



  • 82kolu schrieb:

    aber mathe wenn dir das hilft.

    Nicht wirklich. *schnief*

    82kolu schrieb:

    also tips 😛

    Na ja, mach es wie oben.

    template<unsigned int N>
    class A
    {
    public:
      virtual bool operator == (const A &a) const
      {
        for (unsigned i = 0; i < N; ++i)
          // Vektor vergleichen
      }
    }; // *schnief*, sorry
    
    class B : public A<3>
    {
    public:
      virtual bool operator == (const B &b) const
      {
        return true /* Hier vergleichst du jetzt einfach den Inhalt ohne Schleife, so kann man sich noch etwas Sinn in das Ganze einreden. */ ;
      }
    };
    

    Falls es immer noch nicht klappt, poste den vollständigen Code, mit allen Compilerfehlern. (Dran schreiben welcher Codezeile das hier im Forum entsprechen würde.) (Edit: Und nimm [ cpp ] statt [ code ] Tags, dann ist das so schön bunt.)



  • cooky451 schrieb:

    template<unsigned int N>
    class A
    {
    public:
      virtual bool operator == (const A &a) const   //A fehlt der template parameter
      {
        for (unsigned i = 0; i < N; ++i)
          // Vektor vergleichen
      }
    }; // *schnief*, sorry
    

    Ich versteh nach wie vor den Sinn nicht ganz. Suchst du vielleicht sowas?

    template< class Type , unsigned int Dim >
    class Vector
    {
    public:
        bool operator==( const Vector< Type , Dim > &v ) const
        {
            //Elemente vergleichen, anderer Vector hat die gleiche Dimension
        }
    };
    template< class Type >
    class Vector3
        : public Vector< Type , 3 >
    {
    };
    
    //////////////////
    Vector3< int > v3;
    Vector< int , 3 > v;
    v3 == v;
    v == v3;
    Vector< int , 4 > v_4;
    v4 == v3; //compile error, wüsste auch nicht was das Ergebnis sein sollte
    

    Wenn die Vorgabe ist, dass operator== virtual sein muss, dann mach ihn halt virtual, aber sinnvoll ist es nicht, weil nirgends dynamische Polymorphie verwendet wird.



  • Dir ist aber schon bewusst, dass ich die Frage beantwortet und nicht gestellt habe, und dass du gerade auf einen abgeschlossenen Thread geantwortet hast?
    Und

    GorbGorb schrieb:

    cooky451 schrieb:

    public:
      virtual bool operator == (const A &a) const   //A fehlt der template parameter // Nein, tut er nicht.
    


  • Jain. Deine Lösung war ja nicht ganz richtig.



  • GorbGorb schrieb:

    Jain. Deine Lösung war ja nicht ganz richtig.

    Doch, war sie. Lies erst mal den ganzen Thread.



  • template<unsigned int N>
    class A
    {
    public:
      virtual bool operator == (const A<N> &a) const  //das <N> hat gefehlt
      {
        for (unsigned i = 0; i < N; ++i)
          // Vektor vergleichen
      }
    }; // *schnief*, sorry
    




  • Du hast tatsächlich Recht, dabei war ich mir hier ziemlich sicher, dass das nicht stimmen kann... naja, man lernt wohl nie aus (vor allem nicht bei c++)



  • Also ich hab jetzt mal nachgelesen, man kann operatoren gar nicht virtual machen... jetzt bin ich verwirrt


  • Mod

    82kolu schrieb:

    Also ich hab jetzt mal nachgelesen, man kann operatoren gar nicht virtual machen... jetzt bin ich verwirrt

    Dann war das wo du das gelesen hast nicht richtig. Geht wunderbar, probiers aus. Musst aber aufpassen, dass die Operatoren dann auch wirklich die gleiche Signatur haben.

    virtual operator==(const Base &rhs);
    

    wird beispielsweise nicht durch

    virtual operator==(const Derived &rhs);
    

    ersetzt.



  • Davon würde ich aber abraten. Ist recht unintuitiv, falls nur ein Operand polymorph behandelt wird. Überhaupt ist es im Allgemeinen sinnvoller, operator== als globale Funktion zu implementieren.


Anmelden zum Antworten