2010-06-18 13 views
8

मैं इस प्रकार से हैडर (हेडर गार्ड दिखाया गया है) है:मैं एक निजी समारोह के लिए शरीर को कहां परिभाषित कर सकता हूं?

class GameSystem 
{ 
public: 
    GameSystem(Game *pcGame); 
    virtual ~GameSystem(); 
    void Setup(); 
private: 
    void InitGame(); 
    void RunGame(); 
    void ExitGame(); 
    Game *m_pcGame; 

    /* Properties */ 
    int m_nWidth; 
    int m_nHeight; 
    int m_nFps; 
    bool m_bFullscreen; 
}; 

मैं कहां से InitGame(), RunGame() और ExitGame() के लिए शरीर को परिभाषित कर सकते हैं? क्या मैं इसे अपने .cpp फ़ाइल में परिभाषित कर सकता हूं? यदि हां, तो कैसे? या क्या मैं अपने शरीर को .h फ़ाइल में बनाने के लिए बाध्य हूं?

मैं ग्रहण का उपयोग कर रहा हूं और मैंने टाइपिंग शुरू की: void GameSystem:: और फिर यह निजी कार्यों का सुझाव नहीं देता है।

+5

आईडीई, आप की सेवा के लिए है आपको बताने के लिए नहीं क्या करना है। –

+0

किसी विधि की पहुंच यहां कोई फर्क नहीं पड़ता। चाहे वह सार्वजनिक हो, निजी या संरक्षित '.cpp' फ़ाइल में अपनी विधियों को परिभाषित करने के आपके निर्णय को प्रभावित नहीं करना चाहिए। – ereOn

+1

सिर्फ गैर-प्रश्न के लिए धन्यवाद कहना चाहता था, मैं एक जावा डेवलपर हूं जिसे सी ++ प्रोजेक्ट में ले जाया गया है और इससे मुझे मदद मिली! – GMLewisII

उत्तर

10

हां, तो आप एक .cpp फ़ाइल में परिभाषित कर सकते हैं। फ़ाइल की शुरुआत में बस #include "MyHeader.h" डालें। तुम भी आम तौर पर आप .cpp फ़ाइल में दोनों सार्वजनिक और निजी कार्यों को परिभाषित करेगा तो

void GameSystem::Init(){ 
    //stuff 
} 
+0

लेकिन 'सेटअप() 'समस्या नहीं है। निजी कार्यों को कैसे परिभाषित किया जाए? –

+0

वास्तव में, वास्तव में। बस हेडर फ़ाइल शामिल करें। – wheaties

+0

@ मार्टिजन Courteaux: ठीक उसी तरह से 'सेटअप() ' –

13

तरह प्रत्येक कार्य शुरू करने के लिए की आवश्यकता होगी।

.h फ़ाइल में फ़ंक्शंस को परिभाषित करने का एक कारण यह है कि यदि आप उन्हें इनलाइन करने योग्य बनाना चाहते हैं।

2

मुझे लगता है कि आप private कार्यों के बारे में चिंतित हैं "हेडर में दिखाई नहीं दे रहा है (जो इंटरफ़ेस है)" के अर्थ के साथ निजी होना चाहिए। लेकिन private का अर्थ है "कक्षा के बाहर से पहुंच योग्य नहीं", यानी कक्षा के केवल कार्य private फ़ंक्शंस को कॉल कर सकते हैं। यदि आप नहीं चाहते हैं कि आपकी कक्षा के मानव (इन) उपयोगकर्ता इन कार्यान्वयन विवरण देखें, तो आपको एक उपयुक्त डिजाइन पैटर्न (मुखौटा पैटर्न उदा।) का उपयोग करने की आवश्यकता है।

0

.h में परिभाषित करना इनलाइन है, लेकिन .cpp में परिभाषित करना और आगे की घोषणा का उपयोग करके, आप अपना संकलन अधिक कुशल बना सकते हैं।

यहाँ देखें: http://en.wikipedia.org/wiki/Forward_declaration

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

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