जब मैं सी में ऑब्जेक्ट-ओरिएंटेड कोड लिखता हूं, तो मैं आमतौर पर एक हेडर फ़ाइल में सार्वजनिक कार्यों के साथ संरचना परिभाषा डालता हूं, और सार्वजनिक कार्यों को एक अलग .c फ़ाइल में लागू करता हूं। मैं इस वर्ग के लिए "निजी" सभी कार्यों को स्थिर कीवर्ड देता हूं, और उन्हें .c फ़ाइल में भी लागू करता हूं। सार्वजनिक कार्य तब उसी वर्ग से संबंधित निजी कार्यों को बुला सकते हैं। स्थिर कार्यों के कारण निजी कार्यों को बाहर से नहीं बुलाया जा सकता है, इसलिए जीसीसी इन कार्यों में से कई को अनुकूलित कर सकता है। उन्हें अक्सर रेखांकित किया जाता है और मूल कार्य आउटपुट ऑब्जेक्ट फ़ाइल से पूरी तरह से हटा दिया जाता है।सी ++ निजी कार्यों के लिए आंतरिक संबंध?
अब मेरे प्रश्न पर: मैं सी ++ कक्षाओं के साथ ऐसा कैसे कर सकता हूं?
चलो कहते हैं कि मैं एक हेडर फाइल करते हैं:
class A {
int private_field;
int private_function();
public:
int public_function();
};
और मेरे .cpp फ़ाइल:
#include <iostream>
#include "A.h"
int A::private_function() {
std::cin >> private_field;
return private_field;
}
int A::public_function() {
return private_function() + 4;
}
जिसके परिणामस्वरूप वस्तु फ़ाइल में private_function एक अलग प्रतीक के रूप में छोड़ दिया जाता है, और public_function private_function कॉल (रेखांकित नहीं)। मैं निजी_फंक्शन आंतरिक लिंकेज देना चाहता हूं, इसलिए संकलक वही ऑप्टिमाइज़ेशन कर सकता है जब मैं सी का उपयोग करता हूं, मैंने अनाम नामस्थान और स्थैतिक के साथ प्रयास किया है, लेकिन मैं इसे काम करने के लिए प्राप्त नहीं कर सकता। इसे सही तरीके से कैसे करें, क्या यह भी संभव है? मैं जीसीसी का उपयोग करता हूं।
"मैंने अनाम नामस्थान और स्थैतिक के साथ प्रयास किया है, लेकिन मैं इसे काम करने के लिए नहीं कर सकता क्योंकि मैं चाहूंगा।" क्या गलत हुआ? –
मैंने आपके प्रश्न का उत्तर दिया है, लेकिन संकलक ऐसा करने के लिए आंतरिक संबंधों की आवश्यकता के बारे में अधिक अनुकूलन करने में सक्षम होना चाहिए। –
इनलाइनिंग कभी-कभी (छोटे कार्यों के लिए) की जाती है, लेकिन मूल हमेशा बाएं => बड़े लाइब्रेरी आकार को छोड़ दिया जाता है। – Emil