2012-10-15 25 views
5

मेरे पास ओओपी के बारे में एक बुनियादी सवाल है। मैं कक्षा के अंदर एक विधि बनाना चाहता हूं जो तर्क के रूप में इस वर्ग की 2 वस्तुओं का उपयोग करता है और इन वस्तुओं के गुणों के आधार पर एक फ्लोट मान देता है।किसी ऑब्जेक्ट से संबंधित विधि

public float MyMethod(CMyClass obj1, CMyclass obj2) 

जब मैं मुख्य में इस विधि() मैं इसे इस तरह नहीं कर सकते उपयोग करना चाहते हैं:

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

मैं इस पद्धति है क्योंकि यह एक वस्तु से संबंधित है नहीं देख सकता। मैं इसे इस तरह से एक्सेस कर सकता हूं:

o1.MyMethod(...) 

लेकिन यह समझ में नहीं आता है।

+3

आप जानते हैं कि जावा के विपरीत, एक सी ++ फ़ंक्शन किसी वर्ग का सदस्य नहीं है? –

+0

'सार्वजनिक फ्लोट MyMethod (CMyClass obj1, CMyclass obj2)' यह C++ में एक वाक्यविन्यास त्रुटि है। –

उत्तर

3

आप विधि static घोषणा कर सकते हैं, और इस तरह MyClass::MyMethod

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

आप विधि कर देगा यहाँ

static float MyMethod(CMyClass obj1, CMyclass obj2) 

static कीवर्ड का उपयोग करना उस तक पहुँच वर्ग, नहीं की एक व्यक्ति उदाहरण के हैं वर्ग/वस्तु। CMyClass::MyMethod के रूप में एक्सेस करें।

+1

जावा के विपरीत, सी ++ में सार्वजनिक – nogard

+0

विधि के लिए संशोधक नहीं है। ... ... – djechlin

3

चूंकि आप उन लोगों की विशेषता का उपयोग करना चाहते हैं, तो एक मित्र फ़ंक्शन (गैर सदस्य) का उपयोग करें। आप इसे कक्षा में घोषित कर सकते हैं:

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

आप दूसरे के रूप में स्थिर का भी उपयोग कर सकते हैं, लेकिन 'स्थैतिक' कीवर्ड का दुरुपयोग किया गया है, हर समय स्थैतिक उपयोग न करें! ऑपरेटर ओवरलोडिंग जैसी चीजों के लिए, मित्र या मुफ्त फ़ंक्शन बेहतर है। – Gob00st

संबंधित मुद्दे