2012-10-15 14 views
5

Ich habe eine grundlegende Frage über OOP. Ich möchte eine Methode innerhalb der Klasse erstellen, die 2 Objekte dieser Klasse als Argumente verwendet und einen Gleitkommawert basierend auf den Attributen dieser Objekte zurückgibt.Methode, die nichts mit einem Objekt zu tun hat

public float MyMethod(CMyClass obj1, CMyclass obj2) 

Wenn ich will diese Methode in main() verwenden ich es so nicht tun können:

CMyClass o1 = CMyClass(); 
CMyClass o2 = CMyClass(); 
float x = MyMethod(o1, o2); 

ich diese Methode nicht sehen kann, weil es zu einem Objekt in Beziehung steht. Ich kann darauf wie folgt zugreifen:

o1.MyMethod(...) 

aber das macht keinen Sinn.

+3

Sie wissen, dass eine C++ - Funktion im Gegensatz zu Java * kein Mitglied einer Klasse sein muss? –

+0

'public float MyMethod (CMyClass obj1, CMyclass obj2)' das ist ein Syntaxfehler in C++. –

Antwort

3

Sie können die Methode static, erklären und darauf zuzugreifen wie MyClass::MyMethod

class MyClass { 
public: 
    static void MyMethod(const MyClass & arg1, const MyClass & arg2) {} 
}; 
1

Sie

static float MyMethod(CMyClass obj1, CMyclass obj2) 

static Begriff hier wird die Methode machen gehören zu der Klasse, nicht eine einzelne Instanz der Klasse/Objekt. Zugriff als CMyClass::MyMethod.

+1

im Gegensatz zu Java, in C++ public ist kein Modifikator für eine Methode – nogard

+0

behoben. ... .... – djechlin

3

Da Sie auf diese Attribute zugreifen möchten, verwenden Sie eine Friend-Funktion (kein Member). Sie können es in Ihrer Klasse deklarieren:

friend float MyMethod(CMyClass obj1, CMyclass obj2); 
+0

Sie können auch statische verwenden, wie andere gesagt, aber "statische" Schlüsselwort wurde missbraucht, verwenden Sie nicht die ganze Zeit statisch! Für Dinge wie Überlastung des Bedieners ist Freund oder freie Funktion besser. – Gob00st

Verwandte Themen