2016-05-19 23 views
0

Ich habe ein Stück Code, der eine Klasse von 2x2 Matrizen definiert. Ich habe machte dann eine Methode, die die Determinante einer 2x2-Matrix durch die Definition berechnen kann:Aufruf einer Methode in einer Klasse

double Matrix2x2::CalcDeterminant() const 
{ 
return val00*val11-val10*val01; //these are the values of the matrix entries 
} 

Nun, wenn ich dies auf einige Beispiel testen wollen (ich bin nicht sicher, ob dies das richtige Wort ist) der Klasse ich habe zu schreiben versucht:

int main() 
{ 
Matrix2x2 A=Matrix2x2::Matrix2x2(1,2,3,4); // Matrix2x2 is a constructor that takes 4 real numbers as input and returns a 2x2 matrix 

Matrix2x2::CalcDeterminant(A); //this is where my coding fails. What is wrong with this line? 
} 

Aber der Code nicht in der letzten Zeile, die der Aufruf der Methode offensichtlich nicht der richtige Weg ist. Was mache ich falsch? Ich bin sehr neu in all dem.

+0

off topic: Statt 4 verschiedenen 'valXX'-Variablen, kann ich eine singuläre' doppelte val [2] [2]; '? Eine zweite Möglichkeit, 'std :: array , 2> val;', ist viel hässlicher, aber oft viel einfacher zu anderen Funktionen und Objekten zu übertragen. – user4581301

Antwort

0

Dies ist elementar C++ Syntax:

int main() { 
    Matrix2x2 A(1,2,3,4); 
    A.CalcDeterminant(); 
} 
0

Die Syntax Sie verwenden für statische Methoden ist. Ihre Methode ist nicht statisch, so dass Sie th Methode, um Ihr Objekt anwenden müssen:

A.CalcDeterminant(); 
1

Änderung dieser:

int main() { 
    Matrix2x2 A(1,2,3,4); 

    double det = A.CalcDeterminant(); 
} 

Hier schaffen wir ein Matrix2x2 Objekt A mit dem Konstruktor aufgerufen Sie erwähnt haben, und Rufen Sie CalcDeterminant auf A (dh die Instanz von Matrix2x2, die wir gerade erstellt haben). Der von Ihnen bereitgestellte Code funktioniert, wenn CalcDeterminant eine static-Methode ist und ein Argument vom Typ Matrix2x2 verwendet wird.

1

Jede Elementfunktion in C++ hat ein spezielles Argument, das als this bekannt ist. Sie müssen es nicht explizit weitergeben, wie Sie es tun. Das this Argument ist ein wenig wie das FILE * Argument der stdio.h Funktionen. Es bietet ein Handle für diese Instanz der Klasse.

Mitglied Funktionsaufrufe folgen der Form

inst.func(args); 

Also in Ihrem Fall, Sie

A.CalcDeterminant(); 

Das einzige Mal, wenn Sie schreiben, anrufen können classname::func(args) ist, wenn func eine Funktion static Mitglied ist. Diese Arten von Funktionen haben keinen this Zeiger; Das heißt, sie können nicht auf Member der enthaltenen Klasse zugreifen. Zum Beispiel

class time { 
    // some private members 
public: 
    // other members 
    static time now(); 
}; 

Die now Funktion erhält die aktuelle Uhrzeit. Es macht Sinn, now statisch zu machen, da es keine time Mitglieder verwendet. now würde wie diese

time::now(); 

I empfehlen The C++ Programming Language aufgerufen werden.

Verwandte Themen