क्या staticहैडर फ़ाइल में करने के बजाय * .cpp फ़ाइल में कक्षा सदस्य कार्यों को लागू करना संभव है ?
क्या सभी staticकार्य हमेशा होते हैं inline?
staticकीवर्ड को दोहराएं नहीं । staticहेडर फाइल में केवल क्लास डेफिनिशन में ही कीवर्ड लिखें
क्या staticहैडर फ़ाइल में करने के बजाय * .cpp फ़ाइल में कक्षा सदस्य कार्यों को लागू करना संभव है ?
क्या सभी staticकार्य हमेशा होते हैं inline?
staticकीवर्ड को दोहराएं नहीं । staticहेडर फाइल में केवल क्लास डेफिनिशन में ही कीवर्ड लिखें
जवाबों:
यह है।
test.hpp:
class A {
public:
static int a(int i);
};
test.cpp:
#include <iostream>
#include "test.hpp"
int A::a(int i) {
return i + 2;
}
using namespace std;
int main() {
cout << A::a(4) << endl;
}
वे हमेशा इनलाइन नहीं, नहीं, लेकिन संकलक उन्हें बना सकते हैं।
helper.hxx
class helper
{
public:
static void fn1 ()
{ /* defined in header itself */ }
/* fn2 defined in src file helper.cxx */
static void fn2();
};
helper.cxx
#include "helper.hxx"
void helper::fn2()
{
/* fn2 defined in helper.cxx */
/* do something */
}
A.cxx
#include "helper.hxx"
A::foo() {
helper::fn1();
helper::fn2();
}
यह जानने के लिए कि c ++ स्थैतिक कार्यों को कैसे संभालता है: क्या c ++ में स्थिर सदस्य कार्य कई अनुवाद इकाइयों में कॉपी किए गए हैं?
हाँ आप * .cpp फ़ाइल में स्थिर सदस्य कार्यों को परिभाषित कर सकते हैं। यदि आप इसे हेडर में परिभाषित करते हैं, तो संकलक डिफ़ॉल्ट रूप से इसे इनलाइन के रूप में मानेगा। हालांकि, इसका मतलब यह नहीं है कि स्थिर सदस्य फ़ंक्शन की अलग-अलग प्रतियां निष्पादन योग्य में मौजूद होंगी। कृपया इस बारे में अधिक जानने के लिए इस पोस्ट का अनुसरण करें: क्या कई अनुवाद इकाइयों में कॉपी किए गए c ++ में स्थिर सदस्य फ़ंक्शन हैं?
inlineया templateया आप लिंकर से कई परिभाषा त्रुटियों मिल जाएगा।
अपने शीर्षक फ़ाइल में foo.h कहते हैं
class Foo{
public:
static void someFunction(params..);
// other stuff
}
अपनी कार्यान्वयन फ़ाइल में foo.cpp कहें
#include "foo.h"
void Foo::someFunction(params..){
// Implementation of someFunction
}
जब आप स्थैतिक फ़ंक्शन को अपनी कार्यान्वयन फ़ाइल में लागू कर रहे हों, तो सुनिश्चित करें कि आप अपने विधि हस्ताक्षर में स्थैतिक कीवर्ड का उपयोग नहीं करते हैं।
शुभ लाभ
@ क्रोबार, आप सही कह रहे हैं कि बहु-फ़ाइल उदाहरणों की कमी है, इसलिए मैंने निम्नलिखित को इस उम्मीद में साझा करने का निर्णय लिया कि यह दूसरों की मदद करता है:
::::::::::::::
main.cpp
::::::::::::::
#include <iostream>
#include "UseSomething.h"
#include "Something.h"
int main()
{
UseSomething y;
std::cout << y.getValue() << '\n';
}
::::::::::::::
Something.h
::::::::::::::
#ifndef SOMETHING_H_
#define SOMETHING_H_
class Something
{
private:
static int s_value;
public:
static int getValue() { return s_value; } // static member function
};
#endif
::::::::::::::
Something.cpp
::::::::::::::
#include "Something.h"
int Something::s_value = 1; // initializer
::::::::::::::
UseSomething.h
::::::::::::::
#ifndef USESOMETHING_H_
#define USESOMETHING_H_
class UseSomething
{
public:
int getValue();
};
#endif
::::::::::::::
UseSomething.cpp
::::::::::::::
#include "UseSomething.h"
#include "Something.h"
int UseSomething::getValue()
{
return(Something::getValue());
}
जरूर आप कर सकते हो। मैं कहूंगा कि आपको चाहिए।
यह लेख उपयोगी हो सकता है:
http://www.learncpp.com/cpp-tutorial/812-static-member-functions/
#includeनिर्देश शाब्दिक अर्थ है "इस स्थान के लिए उस फ़ाइल में सभी डेटा की प्रतिलिपि।" इसलिए जब आप हेडर फ़ाइल को शामिल करते हैं, तो यह कोड फ़ाइल के भीतर ही होता है, और इसमें सब कुछ अन्य निर्देशों या मैक्रो रिप्लेसमेंट का प्रभाव देगा, जब कोड फ़ाइल (जिसे अब संकलन इकाई या अनुवाद इकाई कहा जाता है ) है। प्रीप्रोसेसर मॉड्यूल से संकलक मॉड्यूल को सौंप दिया।
जिसका अर्थ है कि आपके स्टैटिक मेंबर फंक्शन की घोषणा और परिभाषा वास्तव में एक ही फाइल में थी ...