abstrakte basisklasse



  • hi zusammen!
    ich habe folgende frage, müssen in einer abstrakten basisklasse alle methoden "virtual void" sein? ich habe folgende abstrakte basisklasse und will nun die unter klasse programmieren...

    basis klasse :

    class transformation {
    
    	public  :
    
    	virtual void invertiere() =0;
    	virtual void martix()     =0;
    
    };
    

    unter klasse :

    class translation : public transformation {
    
    	public :
    
    		void invertiere();
    		Martix martix();
    
    	protected :
    
    		double h(0.0);
    		double v(0.0);
    
    };
    

    zusatz frage, ist es so richtig das ich in der unter klasse die abgeleitete methode neu definieren darf? ist sie dann noch virtuell?
    danke für jede hilfe!!



  • müssen in einer abstrakten basisklasse alle methoden "virtual void" sein?

    Nein, nur "virtual"

    zusatz frage, ist es so richtig das ich in der unter klasse die abgeleitete methode neu definieren darf?

    void invertiere() ist keine neudefinition, sondern die deklaration der geerbten Methode. Martix martix(); da weiss ich nicht, ob das vom überladen her geht!

    ist sie dann noch virtuell?

    ist immer noch virtuell.

    (btw. meinst du nicht Matrix anstelle Martix?)



  • abstrakte schrieb:

    müssen in einer abstrakten basisklasse alle methoden "virtual void" sein?

    Sobald eine Funktion abstrakt ist, ist die Klasse abstrakt. Kann aber weiterhin auch nicht-abstrakte Funktionen haben.

    'void' ist der Rückgabewert, hat nichts mit virtuell zu tun.

    Ausserdem lassen sich Funktionen nicht anhand des Rückgabewertes überladen/überschreiben.

    Wenn du also die abstrakte Methode "virtual void matrix()=0" in der geerbten Klasse überschreiben willst, muss die Funktion auch mindestens "void matrix();" sein.



  • also... martix... ist tippfehler und habe ich behoben... es soll alles matrix heißen...
    nur wenn ich jetzt in der abstrakten basis klasse einen der methoden rückgabe parameter geben will, meckert er...

    abstrakte basis klasse :

    class transformation {
    
    	public  :
    
    	virtual void invertiere() =0;
    	virtual matrix matrix()     =0;
    
    };
    

    compiler :
    transformation.h:28: error: `matrix' declared as a `virtual' field

    woran liegt das? geht doch nur void?



  • vielleicht solltest du matrix mal definieren... :p

    MFG fsd.



  • Funktion und Rückgabetyp sollten vielleicht eher verschiedene Namen haben. "virtual Matrix matrix()" sollte gehen (wenn Matrix definiert ist natürlich).



  • In der abstrakten Basisklasse einen Rueckgabetyp von einer von dieser Basisklasse abgeleiteten Klasse zu haben, das sieht fuer mich recht verquer aus, ich lasse mich da gerne belehren, aber ich halt das fuer Designmaessig nicht so gut.

    Sowas hier koennte ich mir eher vorstellen, und damit kannst du deine Matrixklasse auch ableiten:

    class Transformation { 
    
        public  : 
    
        virtual void invertiere() =0; 
        virtual Transformation matrix()     =0; 
    
    };
    

    Wenn die Methode matrix aber immer eine Matrix zurueck geben muss, dann weis ich nicht warum eine Basisklasse da angebracht ist.

    mfg Entyl Sa



  • also... die methode matrix() sollte vielleicht noch einen anderen namen bekommen... die methode ist dazu da, um homogene koordinaten umzuwandel und eine 3x3 matrix zurückzugeben...



  • Sorry, hab mich da gestern abend irgendwie verlesen, was ich da gelesen hatte, naja war was ganz anderes als du geschrieben hast.


Anmelden zum Antworten