स्थैतिक सदस्य फ़ंक्शन C++ (उदाहरण)

स्टेटिक फ़ंक्शन क्या है? C++?

In C++ क्लासेस में, एक स्टैटिक सदस्य एक क्लास सदस्य होता है जो क्लास से संबंधित होता है न कि उसके ऑब्जेक्ट से। आपके पास सदस्यता की केवल एक ही प्रति होगी। यह आपके द्वारा बनाए गए ऑब्जेक्ट की संख्या से कोई फर्क नहीं पड़ता।

जब किसी क्लास फ़ंक्शन को स्टैटिक के रूप में परिभाषित किया जाता है, तो सभी क्लास ऑब्जेक्ट एक स्टैटिक क्लास सदस्य को साझा करते हैं। इसलिए स्टैटिक फ़ंक्शन को बिना किसी क्लास ऑब्जेक्ट को बनाए एक्सेस किया जा सकता है और यह स्वतंत्र हो जाता है वर्ग वस्तुएँ. में एक स्थिर डेटा सदस्य C++ केवल क्लास के बाहर अन्य स्थैतिक फ़ंक्शनों तक पहुँच सकते हैं।

स्थैतिक फ़ंक्शन का उपयोग क्यों करें?

विपरीत C++ वैश्विक फ़ंक्शन, स्थिर फ़ंक्शन केवल घोषणा की फ़ाइल से ही सुलभ होते हैं। यदि किसी फ़ंक्शन तक पहुँच को प्रतिबंधित करने की आवश्यकता है, तो उसे स्थिर बनाएँ।

किसी अन्य फ़ाइल में समान फ़ंक्शन नाम के पुनः उपयोग को प्रतिबंधित करने के लिए स्थैतिक फ़ंक्शन का उपयोग करें।

स्थैतिक कार्यों को परिभाषित करना C++

सिंटेक्स:

static int myfunc(void)
{
    cout("Example of C++ static function ");
}

उपरोक्त उदाहरण में, हम myfunc नामक एक स्थिर फ़ंक्शन को परिभाषित कर रहे हैं। परिभाषा में static कीवर्ड के उपयोग पर ध्यान दें। कीवर्ड फ़ंक्शन नाम से पहले आता है।

स्थैतिक सदस्य फ़ंक्शन C++

जब किसी फ़ंक्शन सदस्य को स्थिर घोषित किया जाता है, तो वह क्लास में अन्य ऑब्जेक्ट से स्वतंत्र हो जाता है। आप स्थिर सदस्य फ़ंक्शन को तब भी कॉल कर सकते हैं, जब कोई अन्य क्लास ऑब्जेक्ट मौजूद न हो।

क्लास नामों तक पहुँचने के लिए, आपको क्लास का नाम और स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग करना चाहिए (::)एक स्थिर फ़ंक्शन केवल अन्य स्थिर फ़ंक्शन, स्थिर डेटा सदस्य और क्लास के बाहर के अन्य फ़ंक्शन तक ही पहुँच सकता है। स्थिर सदस्य फ़ंक्शन का दायरा क्लास के भीतर होता है, और वे इस क्लास पॉइंटर तक नहीं पहुँच सकते।

उदाहरण 1

#include<iostream>
using namespace std;
class BoxClass {
public:
	static int count;
	BoxClass(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout << "Class constructor called." << endl;
		length = l;
		breadth = b;
		height = h;
		count++;
	}
	double getVolume() {
		return length * breadth * height;
	}
	static int getCount() {
		return count;
	}
private:
	double length;     
	double breadth;    
	double height;     
};
int BoxClass::count = 0;
int main(void) {
	cout << "Inital value of count is : " << BoxClass::getCount() << endl;
	BoxClass Box1(3.2, 1.4, 1.8);    
	BoxClass Box2(7.5, 4.0, 4.0);   
	cout << "Final value of count is : " << BoxClass::getCount() << endl;
	return 0;
}

आउटपुट:

स्थैतिक सदस्य फ़ंक्शन

कोड का स्क्रीनशॉट यहां दिया गया है:

स्थैतिक सदस्य फ़ंक्शन

कोड स्पष्टीकरण:

  1. हमारे में iostream हेडर फ़ाइल शामिल है C++ इसका उपयोग करने के लिए कार्यक्रम कार्यों.
  2. कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी कक्षाओं का उपयोग किया जा सके।
  3. नाम से एक क्लास बनाएं Boxकक्षा।
  4. किसी वर्ग सदस्य को सार्वजनिक रूप से पहुंच योग्य चिह्नित करने के लिए सार्वजनिक पहुंच संशोधक का उपयोग करें।
  5. यह count नामक एक स्थिर वर्ग सदस्य घोषित करता है।
  6. डबल प्रकार के तीन चरों को आरंभ करने के लिए क्लास कंस्ट्रक्टर का उपयोग करें।
  7. कंसोल पर कुछ टेक्स्ट प्रिंट करें। endl (अंतिम पंक्ति) फ़ंक्शन माउस कर्सर को अगली पंक्ति में ले जाता है।
  8. l के मान को परिवर्तनीय लंबाई पर आरंभ करें.
  9. b का मान परिवर्तनीय चौड़ाई पर आरंभ करें।
  10. h के मान को परिवर्तनीय ऊँचाई पर आरंभ करें।
  11. फिर प्रत्येक बार जब कोई नया ऑब्जेक्ट बनाया जाता है तो वेरिएबल काउंट का मान 1 से बढ़ाएं।
  12. कन्स्ट्रक्टर बॉडी का अंत.
  13. doublevolume() नामक एक फ़ंक्शन बनाएँ.
  14. परिभाषित करें कि doubleVolume() फ़ंक्शन क्या लौटाएगा। इसे लंबाई, चौड़ाई और ऊंचाई चरों का गुणन लौटाना चाहिए।
  15. doubleVolume() फ़ंक्शन बॉडी का अंत.
  16. getCount() नामक एक स्थिर फ़ंक्शन घोषित करें.
  17. getCount() फ़ंक्शन को count वेरिएबल का मान लौटाना चाहिए।
  18. getCount() फ़ंक्शन के मुख्य भाग का अंत.
  19. किसी वर्ग सदस्य को सार्वजनिक रूप से सुलभ के रूप में चिह्नित करने के लिए निजी पहुँच संशोधक का उपयोग करें।
  20. डबल डेटा प्रकार के लम्बाई नामक क्लास सदस्य की घोषणा करना। यह निजी रूप से सुलभ होगा।
  21. double डेटा प्रकार के width नामक एक अन्य वर्ग सदस्य की घोषणा करें। यह निजी रूप से सुलभ होगा।
  22. डबल डेटा प्रकार के height नामक क्लास सदस्य की घोषणा करना। यह निजी रूप से सुलभ होगा।
  23. शरीर का अंत Boxकक्षा कक्षा.
  24. फिर एक स्थिर सदस्य को प्रारंभ करें Boxकक्षा कक्षा.
  25. main() फ़ंक्शन को कॉल करना। C++ प्रोग्राम लॉजिक को उस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
  26. नये ऑब्जेक्ट बनाने से पहले कंसोल पर ऑब्जेक्ट की वर्तमान संख्या बताते हुए कुछ पाठ प्रिंट करें।
  27. नामित ऑब्जेक्ट घोषित करें Box1, जो वर्ग का एक उदाहरण है Boxवर्ग. चौड़ाई, लंबाई और ऊंचाई मान कोष्ठक में निर्दिष्ट किया जाना चाहिए.
  28. नामित ऑब्जेक्ट घोषित करें Box2, जो वर्ग का एक उदाहरण है Boxवर्ग. चौड़ाई, लंबाई और ऊंचाई मान कोष्ठक में निर्दिष्ट किया गया है।
  29. नए ऑब्जेक्ट के निर्माण के बाद ऑब्जेक्ट की वर्तमान संख्या बताते हुए कंसोल पर कुछ पाठ प्रिंट करें।
  30. RSI C++ कार्यक्रम सफलतापूर्वक पूरा होने पर मान वापस करना होगा.
  31. फ़ंक्शन main() के मुख्य भाग का अंत.

स्थैतिक कार्यों तक पहुँचना

स्टैटिक फ़ंक्शन तक पहुँचने के लिए आपको क्लास ऑब्जेक्ट बनाने की ज़रूरत नहीं है। इसके बजाय, आप क्लास नाम और स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग कर सकते हैं (::).

सिंटेक्स:

className::funcName

ऊपर, className उस क्लास का नाम है जहाँ स्टैटिक फ़ंक्शन परिभाषित किया गया है। funcName स्टैटिक फ़ंक्शन को निर्दिष्ट नाम है।

उदाहरण 2

#include<iostream> 
using namespace std;
class MyClass {
public:
	static void msgFunc() {
		cout << "Welcome to Guru99!";
	}
};
int main() {
	MyClass::msgFunc();
}

आउटपुट:

स्थैतिक कार्यों तक पहुँचना

कोड का स्क्रीनशॉट यहां दिया गया है:

स्थैतिक कार्यों तक पहुँचना

कोड स्पष्टीकरण:

  1. अपने प्रोग्राम में iostream हेडर फ़ाइल को शामिल करके इसके फ़ंक्शन का उपयोग करें।
  2. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी कक्षाओं का उपयोग किया जा सके।
  3. MyClass नाम से एक क्लास बनाएं.
  4. किसी वर्ग सदस्य को सार्वजनिक रूप से सुलभ के रूप में चिह्नित करने के लिए सार्वजनिक पहुँच संशोधक का उपयोग करें।
  5. msgFunc() नामक एक स्थिर फ़ंक्शन घोषित करना। static कीवर्ड फ़ंक्शन को स्थिर बनाता है।
  6. उपरोक्त फ़ंक्शन को कॉल/आह्वान करने पर कंसोल पर प्रिंट करने के लिए पाठ निर्दिष्ट करें।
  7. msgFunc() फ़ंक्शन के मुख्य भाग का अंत.
  8. कक्षा मुख्य भाग समाप्त करें.
  9. main() फ़ंक्शन को कॉल करना.
  10. msgFunc() नामक स्थिर फ़ंक्शन को कॉल करें.
  11. फ़ंक्शन main() के मुख्य भाग का अंत.

स्थैतिक चरों तक पहुँचना

स्टैटिक वैरिएबल क्लास ऑब्जेक्ट के बजाय क्लास से संबंधित होते हैं। यदि कोई स्टैटिक वैरिएबल पब्लिक है, तो उसे क्लास नाम और स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग करके एक्सेस किया जा सकता है। हालाँकि, यदि कोई स्टैटिक सदस्य निजी है तो यह संभव नहीं है।

आम तौर पर, निजी चरों को सार्वजनिक फ़ंक्शन का उपयोग करके एक्सेस किया जाता है। हालाँकि, एक क्लास इंस्टेंस/ऑब्जेक्ट बनाया जाना चाहिए। इसका समाधान एक स्थिर फ़ंक्शन का उपयोग करना है।

उदाहरण 3: स्थिर चर C++ कक्षा

#include<iostream> 
using namespace std;
class AClass {
private:
	static int myvar;
public:
	static int getVar() { 
		return myvar; 
		} 
};
int AClass::myvar = 23; 
int main() {
	cout <<"The value of myvar is: "<< AClass::getVar() << '\n';
}

आउटपुट:

स्थैतिक चरों तक पहुँचना

कोड का स्क्रीनशॉट यहां दिया गया है:

स्थैतिक चरों तक पहुँचना

कोड स्पष्टीकरण:

  1. हमारे कार्यक्रम में iostream हेडर फ़ाइल शामिल करना।
  2. इस प्रोग्राम में std नामस्थान को शामिल करें ताकि बिना कॉल किए इसके क्लासों का उपयोग किया जा सके।
  3. AClass नामक एक क्लास बनाएं.
  4. myvar चर को निजी रूप से सुलभ बनाने के लिए निजी पहुँच संशोधक का उपयोग करें।
  5. myvar नामक एक स्थिर पूर्णांक चर बनाएँ.
  6. सार्वजनिक पहुँच संशोधक का उपयोग करें जो getVar() फ़ंक्शन को सार्वजनिक रूप से पहुँच योग्य के रूप में चिह्नित करता है।
  7. getVar() नामक एक स्थिर फ़ंक्शन बनाना।
  8. getVar() फ़ंक्शन को वेरिएबल myvar का मान लौटाने में सक्षम होना चाहिए।
  9. getVar() फ़ंक्शन के मुख्य भाग का अंत.
  10. क्लास AClass के मुख्य भाग का अंत.
  11. वेरिएबल myvar को 23 का मान निर्दिष्ट करें। हमने इसके लिए क्लास नाम और स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग किया है।
  12. main() फ़ंक्शन को कॉल करना.
  13. कंसोल पर अन्य टेक्स्ट के साथ वैरिएबल myVar का मान प्रिंट करें। हमने इस वैरिएबल के मान तक पहुँचने के लिए क्लास नाम, स्टैटिक फ़ंक्शन और स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग किया है।
  14. main() फ़ंक्शन बॉडी का अंत.

स्टेटिक फ़ंक्शन में यह पॉइंटर

स्टैटिक फ़ंक्शन किसी ऑब्जेक्ट से जुड़ा नहीं होता है। यही कारण है कि स्टैटिक फ़ंक्शन में यह पॉइंटर नहीं होता है। ऑब्जेक्ट का पॉइंटर आमतौर पर उस ऑब्जेक्ट की ओर इशारा करता है जिस पर वह वर्तमान में काम कर रहा है। चूँकि स्टैटिक फ़ंक्शन ऑब्जेक्ट के साथ काम नहीं करते हैं, इसलिए इस पॉइंटर की कोई ज़रूरत नहीं है।

स्टैटिक फ़ंक्शन के पास अन्य स्टैटिक सदस्यों तक सीधी पहुँच होती है। हालाँकि, गैर-स्टैटिक सदस्यों के साथ ऐसा नहीं है। इसका कारण यह है कि गैर-स्टैटिक सदस्यों को किसी ऑब्जेक्ट से संबंधित होना पड़ता है, लेकिन स्टैटिक फ़ंक्शन के पास काम करने के लिए ऑब्जेक्ट नहीं होते हैं।

उदाहरण 4

क्लास घोषणा के बाहर एक स्थिर फ़ंक्शन को परिभाषित करना संभव है। आइए हम इसे प्रदर्शित करें:

#include<iostream> 
using namespace std;
class NumGenerator {
private:
	static int nextNum; 
public:
	static int getNextNum();
};
int NumGenerator::nextNum = 1;
int NumGenerator::getNextNum() {
	return nextNum++; 
}
int main() {
	for (int count = 0; count < 5; ++count)
		std::cout << "The next number is: " << NumGenerator::getNextNum() << '\n';
	return 0;
}

आउटपुट:

स्टेटिक फ़ंक्शन में यह पॉइंटर

आपके कोड का स्क्रीनशॉट यहां है:

स्टेटिक फ़ंक्शन में यह पॉइंटर

कोड स्पष्टीकरण:

  1. इसके कार्यों का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल को शामिल करना।
  2. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
  3. Num नामक एक क्लास बनाएंGenerator.
  4. निजी पहुंच संशोधक का उपयोग करके उस चर को चिह्नित करें जिसे हम निजी रूप से सुलभ बनाने जा रहे हैं।
  5. nextNum नामक एक स्थिर पूर्णांक चर बनाएँ.
  6. सार्वजनिक पहुंच संशोधक का उपयोग करने से आपको उस चर को सार्वजनिक रूप से सुलभ के रूप में चिह्नित करने में मदद मिलती है जिसे हम बनाने वाले हैं।
  7. getNextNum() नामक एक स्थिर फ़ंक्शन घोषित करना।
  8. कक्षा का अंत.
  9. वेरिएबल nextNum को 1 का मान निर्दिष्ट करें। हमने यह कार्य क्लास नाम, वेरिएबल नाम और स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग करके किया है।
  10. क्लास के बाहर getNextNum() स्थिर फ़ंक्शन को परिभाषित करना।
  11. उपरोक्त फ़ंक्शन को कॉल/आह्वान किए जाने पर की जाने वाली कार्रवाई निर्दिष्ट करें। यह वेरिएबल nextNum के मान को 1 से बढ़ा देगा।
  12. फ़ंक्शन getNextNum() की परिभाषा का अंत.
  13. main() फ़ंक्शन को कॉल करना। C++ प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
  14. उपयोग पाश के लिए count नामक एक वैरिएबल बनाने के लिए। इस वैरिएबल का मान 0 से 4 तक बढ़ना चाहिए। प्रत्येक पुनरावृत्ति के बाद, वैरिएबल का मान 1 से बढ़ जाएगा।
  15. प्रत्येक पुनरावृत्ति पर कंसोल पर अन्य पाठ के साथ-साथ वेरिएबल nextNum का मान प्रिंट करना। getNextNum() फ़ंक्शन का उपयोग करके मान तक पहुँचा जाता है।
  16. इस C++ प्रोग्राम को सफलतापूर्वक पूरा होने पर मान वापस करना होगा.
  17. main() फ़ंक्शन का अंत.

सारांश

  • C++ स्थैतिक सदस्य वर्ग के सदस्य होते हैं जो वर्ग से संबंधित होते हैं न कि उसके ऑब्जेक्ट से।
  • आपके द्वारा बनाए गए ऑब्जेक्ट्स की संख्या चाहे जितनी भी हो, आपके पास स्टैटिक सदस्य की केवल एक ही प्रति होगी।
  • सभी वर्ग ऑब्जेक्ट प्रत्येक स्थिर वर्ग सदस्य को साझा करते हैं।
  • किसी क्लास फ़ंक्शन को स्थैतिक के रूप में परिभाषित करने के बाद, यह क्लास ऑब्जेक्ट्स से स्वतंत्र हो जाता है।
  • यदि आप कोई क्लास ऑब्जेक्ट नहीं बनाते हैं तो भी स्थैतिक फ़ंक्शन तक पहुँचा जा सकता है।
  • हालाँकि, स्थैतिक फ़ंक्शन में यह ऑब्जेक्ट नहीं होता है, जो क्लास ऑब्जेक्ट की ओर इशारा करता है।