virtual
-
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*, sorryIch 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 sollteWenn 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?
UndGorbGorb 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
-
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.