| Autor |
Nachricht |
Monkey12345
Unregistrierter
|
Monkey12345 Unregistrierter
14:27:12 20.06.2012 Titel: |
Vererbung |
Zitieren |
Hallo!
Ich habe folgende Matrixklasse geschrieben:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Matrix
{
protected:
int m, n; //Dimensionen
vector <double> entry; //Einträge der m x n Matrix
public:
int getM(){return m;};
int getN(){return n;};
virtual double getCoefficient(int i, int j){return entry[i*getM() + j];};
virtual void setCoefficient(int i, int j, double coeff){entry[i*getM() + j] = coeff;};
void print(){for(int i =0; i<m; i++){for(int j = 0; j<n; j++){cout<<"["<<i<<"]["<<j<<"]: "<<getCoefficient(i, j)<<" ";}cout<<endl;}cout<<endl;};
Matrix(int m, int n); //Konstruktor für Matrix m x n ohne Einträge
Matrix(int m, int n, double init); //Konstruktor für m x n Matrix mit init intialisiert
virtual void init(); //komplette Matrix initialisieren
virtual Matrix operator*(Matrix &M); //Matrix Matrix Multiplikation
}; | |
Von dieser Klasse habe ich jetzt die Klasse SquareMatrix abgeleitet:
| C++: | class SquareMatrix : public Matrix //speichert quadratische Matrizen
{
public:
SquareMatrix(int n, double init) : Matrix(n, n, init){}; //Konstruktor wird von Matrix übernommen
}; | |
Was ich jetzt erreichen möchte, ist, Objekte vom Typ SquareMatrix mit dem * - Operator zu multiplizieren. Da der Rückgabetyp hier aber Matrix ist, funktioniert das bei mir nicht. Ich hab das jetzt vorerst so gelöst, dass ich die Klasse SquareMatrix um die Methode "SquareMatrix operator*(SquareMatrix &M);" erweitert habe, also den Rückgabetypen angepasst.
Das scheint mir aber keine besonders elegante Lösung zu sein, meine Frage daher:
gibt es eine Möglichkeit, die Methode in die abgeleitete Klasse zu übernehmen, sodass sie auch von den abgeleiteten Klassen ohne spezielle Anpassung verwendet werden können?
Danke im Voraus
Lg Monkey12345 |
|
|
|
 |
C++ Forumbot
Forumbot
Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 17119
|
C++ Forumbot Forumbot
14:35:10 20.06.2012 Titel: |
|
Zitieren |
|
 |
knivil
Mitglied
Benutzerprofil
Anmeldungsdatum: 11.02.2009
Beiträge: 5865
|
knivil Mitglied
15:28:30 20.06.2012 Titel: |
|
Zitieren |
Warum ueberhaupt ableiten. Einfach eine allgemeine Matrixmultiplikation implementieren und schauen ob die Dimensionen stimmen. Wenn nicht beispielsweise ein std::logic_error werfen. |
_________________ If it were not for laughter, there would be no Tao.
Sie können einen Beitrag nicht so schnell nach Ihrem letzten absenden, bitte warten Sie einen Augenblick.
|
|
 |
cooky451
Mitglied
Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 6871
|
cooky451 Mitglied
16:16:06 20.06.2012 Titel: |
Re: Vererbung |
Zitieren |
| Monkey12345 schrieb: |
| C++: | virtual void init(); //komplette Matrix initialisieren
virtual Matrix operator*(Matrix &M); //Matrix Matrix Multiplikation | |
| Aua, aua, aua. Warum tust du mir das an? |
_________________ Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
Keksverteilungsbeauftragter
|
|
 |
Bashar
Mitglied
Benutzerprofil
Anmeldungsdatum: 15.05.2001
Beiträge: 17749
|
Bashar Mitglied
16:30:54 20.06.2012 Titel: |
|
Zitieren |
| Monkey12345 schrieb: |
Ich hab das jetzt vorerst so gelöst, dass ich die Klasse SquareMatrix um die Methode "SquareMatrix operator*(SquareMatrix &M);" erweitert habe, also den Rückgabetypen angepasst.
Das scheint mir aber keine besonders elegante Lösung zu sein |
Das ist überhaupt keine Lösung, weil du auch den Parametertyp anpassen müsstest. Ich mein, was willst du mit einer Methode, die SquareMatrix*Matrix berechnen kann, das Ergebnis ist ja idR nicht quadratisch. Du willst eigentlich eine SquareMatrix*SquareMatrix -> SquareMatrix, und das geht nicht (oder nicht so einfach...), weil Parametertypen in der Ableitung nicht eingeschränkt werden dürfen (Kontravarianz).
Mich erinnert das ein bisschen an die bekannte Diskussion, ob Kreis ein Subtyp von Ellipse ist. Siehe auch Liskov Substitution Principle. |
_________________ OSL♥
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|