C++ क्लास और ऑब्जेक्ट उदाहरण सहित

क्लास क्या है?

A C++ क्लास डेटा और डेटा को मैनिपुलेट करने के लिए विधियों को एक में जोड़ता है। क्लास ऑब्जेक्ट के रूप भी निर्धारित करते हैं। क्लास में मौजूद डेटा और विधियों को क्लास मेंबर के रूप में जाना जाता है। क्लास एक उपयोगकर्ता-परिभाषित डेटा प्रकार है। क्लास के सदस्यों तक पहुँचने के लिए, हम क्लास के इंस्टेंस का उपयोग करते हैं। आप क्लास को ऑब्जेक्ट के ब्लूप्रिंट के रूप में देख सकते हैं।

क्लास घर के लिए प्रोटोटाइप हो सकता है। यह दरवाज़ों, खिड़कियों, फर्श आदि का स्थान और आकार दिखाता है। इन विवरणों से हम घर बना सकते हैं। घर ऑब्जेक्ट बन जाता है। प्रोटोटाइप से कई घर बनाना संभव है। साथ ही, क्लास से कई ऑब्जेक्ट बनाना संभव है।

C++ वर्ग

ऊपर दिए गए चित्र में, हमारे पास एक घर का प्रोटोटाइप है। इस प्रोटोटाइप से, हमने अलग-अलग विशेषताओं वाले दो घर बनाए हैं।

वर्ग घोषणा

C+ में, क्लास को class कीवर्ड का उपयोग करके परिभाषित किया जाता है। इसके बाद क्लास का नाम होना चाहिए। फिर क्लास बॉडी को कर्ली ब्रेसेज़ { } के बीच जोड़ा जाता है।

वाक्य - विन्यास

class class-name
   {
   // data
   // functions
   };
  • क्लास-नाम वह नाम है जो क्लास को निर्दिष्ट किया जाता है।
  • डेटा क्लास के लिए डेटा है, जिसे सामान्यतः चर के रूप में घोषित किया जाता है।
  • ये फ़ंक्शन वर्ग फ़ंक्शन हैं.

निजी और सार्वजनिक कीवर्ड

आपने इन दो कीवर्ड को अवश्य देखा होगा। वे एक्सेस मॉडिफायर हैं।

  • निजी:

जब किसी फ़ंक्शन या क्लास को परिभाषित करने के लिए private कीवर्ड का उपयोग किया जाता है, तो वह private हो जाता है। ऐसे फ़ंक्शन केवल क्लास के भीतर से ही एक्सेस किए जा सकते हैं।

  • जनता:

दूसरी ओर, public कीवर्ड डेटा/फ़ंक्शन को सार्वजनिक बनाता है। इन्हें क्लास के बाहर से एक्सेस किया जा सकता है।

वस्तु परिभाषा

ऑब्जेक्ट्स क्लास से बनाए जाते हैं। क्लास ऑब्जेक्ट्स को उसी तरह घोषित किया जाता है जैसे वैरिएबल घोषित किए जाते हैं। क्लास नाम से शुरू होना चाहिए, उसके बाद ऑब्जेक्ट का नाम होना चाहिए। क्लास टाइप का ऑब्जेक्ट।

वाक्य - विन्यास

class-name object-name;
  • क्लास-नाम उस क्लास का नाम है जिससे ऑब्जेक्ट बनाया जाना है।
  • ऑब्जेक्ट-नाम वह नाम है जो नये ऑब्जेक्ट को सौंपा जाएगा।

किसी क्लास से ऑब्जेक्ट बनाने की इस प्रक्रिया को इन्स्टेन्शियशन (instantiation) कहा जाता है।

डेटा सदस्यों तक पहुँचना

किसी क्लास के पब्लिक सदस्यों तक पहुँचने के लिए, हम (.)dot ऑपरेटर का उपयोग करते हैं। ये पब्लिक एक्सेस मॉडिफ़ायर से चिह्नित सदस्य हैं।

उदाहरण 1

#include <iostream>
using namespace std;
class Phone {
public:
	double cost;   
	int slots; 
};
int main() {
	Phone Y6;        
	Phone Y7;        

	Y6.cost = 100.0;
	Y6.slots = 2;

	Y7.cost = 200.0;
	Y7.slots = 2;
	cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
	cout << "Cost of Huawei Y7 : " << Y7.cost << endl;

	cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
	cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;

	return 0;
}

आउटपुट:

डेटा सदस्यों तक पहुँचना

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

डेटा सदस्यों तक पहुँचना

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

  1. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
  2. हमारे कोड में std नामस्थान को शामिल करना ताकि इसे कॉल किए बिना इसके क्लासों का उपयोग किया जा सके।
  3. फ़ोन नामक एक क्लास घोषित करें.
  4. हम जिन चरों को बनाने जा रहे हैं उन्हें सार्वजनिक रूप से सुलभ के रूप में चिह्नित करने के लिए सार्वजनिक पहुंच संशोधक का उपयोग करना।
  5. डबल डेटा प्रकार की परिवर्तनीय लागत घोषित करें।
  6. स्लॉट्स नामक एक पूर्णांक चर घोषित करें.
  7. कक्षा का अंत.
  8. main() फ़ंक्शन को कॉल करना। प्रोग्राम लॉजिक को इसके बॉडी में जोड़ा जाना चाहिए।
  9. फ़ोन प्रकार का Y6 नामक ऑब्जेक्ट बनाएँ। इसे इंस्टेंटिएशन कहा जाता है।
  10. फ़ोन प्रकार का Y7 नामक ऑब्जेक्ट बनाएँ। इसे इंस्टेंटिएशन कहा जाता है।
  11. ऑब्जेक्ट Y6 का उपयोग करके क्लास फ़ोन के चर/सदस्य लागत तक पहुँचें। मान 100.0 पर सेट है। Y6 की लागत अब 100.0 पर सेट है।
  12. ऑब्जेक्ट Y6 का उपयोग करके क्लास फ़ोन के वेरिएबल/सदस्य स्लॉट तक पहुँचें। मान 2 पर सेट है। Y6 के लिए स्लॉट अब 2 पर सेट है।
  13. ऑब्जेक्ट Y7 का उपयोग करके क्लास फ़ोन के चर/सदस्य लागत तक पहुँचें। मान 200.0 पर सेट है। Y7 की लागत अब 200.0 पर सेट है।
  14. ऑब्जेक्ट Y7 का उपयोग करके क्लास फ़ोन के वेरिएबल/सदस्य स्लॉट तक पहुँचें। मान 2 पर सेट है। Y7 के लिए स्लॉट अब 2 पर सेट है।
  15. Y6 की लागत को अन्य पाठ के साथ कंसोल पर प्रिंट करें।
  16. Y7 की लागत को अन्य पाठ के साथ कंसोल पर प्रिंट करें।
  17. अन्य पाठ के साथ Y6 के लिए स्लॉट की संख्या प्रिंट करें।
  18. अन्य पाठ के साथ Y7 के लिए स्लॉट की संख्या प्रिंट करें।
  19. प्रोग्राम को सफलतापूर्वक पूरा होने पर एक मान लौटाना होगा।
  20. main() फ़ंक्शन के मुख्य भाग का अंत.

निजी क्लास क्या है?

निजी के रूप में चिह्नित क्लास सदस्यों को केवल क्लास के भीतर परिभाषित फ़ंक्शन द्वारा ही एक्सेस किया जा सकता है। क्लास के बाहर परिभाषित कोई भी ऑब्जेक्ट या फ़ंक्शन ऐसे सदस्यों को सीधे एक्सेस नहीं कर सकता है। एक निजी क्लास सदस्य को केवल सदस्य और मित्र फ़ंक्शन द्वारा ही एक्सेस किया जाता है।

संरक्षित वर्ग क्या है?

संरक्षित के रूप में चिह्नित वर्ग सदस्यों को निजी के रूप में चिह्नित लोगों की तुलना में एक लाभ होता है। उन्हें उनकी परिभाषा के वर्ग के भीतर फ़ंक्शन द्वारा एक्सेस किया जा सकता है। इसके अतिरिक्त, उन्हें व्युत्पन्न वर्गों से एक्सेस किया जा सकता है।

उदाहरण 2

#include <iostream>
using namespace std;
class ClassA {
public:
	void set_a(int val);
	int get_a(void);

private:
	int a;
};
int ClassA::get_a(void) {
	return a;
}
void ClassA::set_a(int val) {
	a = val;
}
int main() {
	ClassA a;
	a.set_a(20); 
	cout << "Value of a is: " << a.get_a(); 
	return 0;
}

आउटपुट:

डेटा सदस्यों तक पहुँचना

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

डेटा सदस्यों तक पहुँचना

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

  1. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
  2. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
  3. ClassA नामक एक क्लास बनाएं.
  4. बनाए जाने वाले वर्ग सदस्य को सार्वजनिक रूप से सुलभ के रूप में चिह्नित करने के लिए सार्वजनिक पहुँच संशोधक का उपयोग करें।
  5. set_a() नामक फ़ंक्शन बनाएँ जो एक पूर्णांक मान val लेता है।
  6. get_a() नामक एक फ़ंक्शन बनाएँ.
  7. बनाए जाने वाले वर्ग सदस्य को निजी रूप से पहुंच योग्य के रूप में चिह्नित करने के लिए निजी पहुंच संशोधक का उपयोग करें।
  8. a नामक एक पूर्णांक चर घोषित करें.
  9. कक्षा का अंत.
  10. फ़ंक्शन get_a() तक पहुँचने के लिए क्लास नाम और स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग करें। हम यह परिभाषित करना चाहते हैं कि फ़ंक्शन को लागू करने पर क्या होता है।
  11. फ़ंक्शन get_a() को लागू किए जाने पर चर a का मान लौटाना चाहिए।
  12. फ़ंक्शन get_a() की परिभाषा का अंत.
  13. फ़ंक्शन set_a() तक पहुँचने के लिए क्लास नाम और स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग करें। हम यह परिभाषित करना चाहते हैं कि फ़ंक्शन को लागू करने पर क्या होता है।
  14. चर val का मान चर a को निर्दिष्ट करना.
  15. फ़ंक्शन set_a() की परिभाषा का अंत.
  16. main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
  17. ClassA का एक उदाहरण बनाएं और उसे a नाम दें।
  18. चर a को 20 का मान निर्दिष्ट करने के लिए उपरोक्त क्लास इंस्टैंस और फ़ंक्शन set_a() का उपयोग करें।
  19. कंसोल पर वेरिएबल a के मान के साथ कुछ टेक्स्ट प्रिंट करना। वेरिएबल a का मान get_a() फ़ंक्शन को कॉल करके प्राप्त किया जाता है।
  20. प्रोग्राम को सफलतापूर्वक पूरा होने पर मान लौटाना होगा।
  21. फ़ंक्शन main() के मुख्य भाग का अंत.

उदाहरण 3

#include <iostream>
using namespace std;
class ParentClass {
protected:
	int value;
};
class ChildClass : public ParentClass {
public:
	void setId(int x) {
		value = x;
	}
	void displayValue() {
	cout << "Value is: " << value << endl;
	}
};
int main() {
	ChildClass c;
	c.setId(21);
	c.displayValue();
	return 0;
}

आउटपुट:

डेटा सदस्यों तक पहुँचना

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

डेटा सदस्यों तक पहुँचना

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

  1. इसके फ़ंक्शन का उपयोग करने के लिए अपने कोड में iostream हेडर फ़ाइल शामिल करें।
  2. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
  3. ParentClass नामक एक क्लास बनाएं.
  4. बनाए जाने वाले वर्ग सदस्य को संरक्षित के रूप में चिह्नित करने के लिए संरक्षित एक्सेस संशोधक का उपयोग करें।
  5. value नामक एक पूर्णांक चर बनाएँ.
  6. कक्षा का अंत.
  7. ChildClass नामक एक नया वर्ग बनाएं जो ParentClass को विरासत में प्राप्त करता है।
  8. बनाए जाने वाले वर्ग सदस्य को बाल वर्गों के लिए पहुँच योग्य चिह्नित करने के लिए संरक्षित पहुँच संशोधक का उपयोग करें।
  9. setId() नामक फ़ंक्शन बनाएँ जो एक पूर्णांक मान x लेता है।
  10. चर x का मान चर मान को निर्दिष्ट करना।
  11. फ़ंक्शन setId() की परिभाषा का अंत.
  12. displayValue() नामक एक फ़ंक्शन बनाएँ.
  13. कंसोल पर value नामक वेरिएबल का मान अन्य टेक्स्ट के साथ प्रिंट करें।
  14. फ़ंक्शन displayValue() के मुख्य भाग का अंत.
  15. ChildClass नामक क्लास के मुख्य भाग का अंत.
  16. main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
  17. ChildClass का एक उदाहरण बनाएं और इसे c नाम दें।
  18. चर x को 21 का मान निर्दिष्ट करने के लिए उपरोक्त क्लास इंस्टैंस और फ़ंक्शन setId() का उपयोग करें।
  19. displayValue() नामक फ़ंक्शन को कॉल करने के लिए उपरोक्त क्लास इंस्टेंस का उपयोग करें।
  20. प्रोग्राम को सफलतापूर्वक पूरा होने पर मान लौटाना होगा।
  21. फ़ंक्शन main() के मुख्य भाग का अंत.

क्लास सदस्य फ़ंक्शन

फ़ंक्शन हमें डेटा में हेरफेर करने में मदद करते हैं। क्लास सदस्य फ़ंक्शन को दो तरीकों से परिभाषित किया जा सकता है:

  • वर्ग परिभाषा के अंदर
  • वर्ग परिभाषा के बाहर

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

उदाहरण 2

#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
	string tutorial_name;
	int id;
	void printname();
	void printid()
	{
		cout << "Tutorial id is: "<< id;
	}
};
void Guru99::printname()
{
	cout << "Tutorial name is: " << tutorial_name;
}
int main() {
	Guru99 guru99;
	guru99.tutorial_name = "C++";
	guru99.id = 1001;
	guru99.printname();
	cout << endl;
	guru99.printid();
	return 0;
}

आउटपुट:

क्लास सदस्य फ़ंक्शन

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

क्लास सदस्य फ़ंक्शन

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

  1. इसके कार्यों का उपयोग करने के लिए हमारे प्रोग्राम में iostream हेडर फ़ाइल शामिल करें।
  2. अपने प्रोग्राम के फ़ंक्शन का उपयोग करने के लिए स्ट्रिंग हेडर फ़ाइल को इसमें शामिल करें।
  3. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
  4. गुरु99 नाम से एक क्लास बनाएं.
  5. हम जिन वर्ग सदस्यों को बनाने जा रहे हैं उन्हें सार्वजनिक रूप से सुलभ के रूप में चिह्नित करने के लिए सार्वजनिक पहुँच संशोधक का उपयोग करें।
  6. tutorial_name नामक एक स्ट्रिंग वेरिएबल बनाएं.
  7. id नामक एक पूर्णांक चर बनाएँ.
  8. printname() नामक एक फ़ंक्शन बनाएँ। यह फ़ंक्शन क्लास परिभाषा में परिभाषित नहीं है।
  9. प्रिंटेड() नामक एक फ़ंक्शन बनाएँ। यह फ़ंक्शन क्लास परिभाषा के भीतर परिभाषित किया गया है। इसका मुख्य भाग क्लास परिभाषा के भीतर जोड़ा गया है।
  10. कंसोल पर अन्य टेक्स्ट के साथ वैरिएबल id का मान प्रिंट करें। ध्यान दें कि इसे printid() फ़ंक्शन के मुख्य भाग में जोड़ा गया है। यह केवल तभी निष्पादित होगा जब printid() फ़ंक्शन को कॉल किया जाएगा।
  11. फ़ंक्शन printid() के मुख्य भाग का अंत.
  12. गुरु99 वर्ग के शरीर का अंत.
  13. फ़ंक्शन printname() की परिभाषा का प्रारंभ.
  14. कंसोल पर अन्य टेक्स्ट के साथ वेरिएबल ट्यूटोरियल_नाम का मान प्रिंट करें। ध्यान दें कि इसे प्रिंटनाम() फ़ंक्शन के मुख्य भाग में जोड़ा गया है। यह केवल तभी निष्पादित होगा जब प्रिंटनाम() फ़ंक्शन को कॉल किया जाएगा।
  15. printname() फ़ंक्शन की परिभाषा का अंत.
  16. main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
  17. गुरु99 वर्ग का एक उदाहरण बनाएं और इसे गुरु99 नाम दें।
  18. मान निर्दिष्ट करने के लिए उपरोक्त उदाहरण का उपयोग करें C++ चर tutorial_name के लिए.
  19. वेरिएबल id को 99 का मान निर्दिष्ट करने के लिए guru1001 इंस्टैंस का उपयोग करें।
  20. printname() फ़ंक्शन को कॉल करने के लिए guru99 इंस्टेंस का उपयोग करें।
  21. कंसोल पर एक नई रिक्त पंक्ति प्रिंट करने के लिए end (अंतिम पंक्ति) कमांड को कॉल करें।
  22. printid() फ़ंक्शन को कॉल करने के लिए guru99 इंस्टैंस का उपयोग करें।
  23. प्रोग्राम को सफलतापूर्वक पूरा होने पर मान लौटाना होगा।
  24. main() फ़ंक्शन के मुख्य भाग का अंत.

निर्माता और विध्वंसक

कंस्ट्रक्टर्स क्या है?

कंस्ट्रक्ट्स विशेष फ़ंक्शन होते हैं जो ऑब्जेक्ट्स को आरंभीकृत करते हैं। C++ संकलनकर्ता ऑब्जेक्ट बनाते समय कंस्ट्रक्टर को कॉल करता है। कंस्ट्रक्टर क्लास के सदस्यों को मान निर्दिष्ट करने में मदद करते हैं। बेशक, ऐसा तब होता है जब उन्हें कुछ मेमोरी स्पेस आवंटित किया जाता है।

डिस्ट्रक्टर्स क्या है?

दूसरी ओर, डिस्ट्रक्टर्स क्लास ऑब्जेक्ट्स को नष्ट करने में मदद करते हैं।

कंस्ट्रक्टर का नाम क्लास के नाम के समान होना चाहिए। कंस्ट्रक्टर का कोई रिटर्न प्रकार नहीं होता।

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

उदाहरण 3

#include <iostream>  
using namespace std;
class ClassA {
public:
	ClassA() {
		cout << "Class constructor called"<<endl;
	}
	~ClassA() {
		cout << "Class destructor called"<<endl;
	}
};

int main() {
	ClassA a;
	int p = 1;
		if (p) {
			ClassA b; 
		}   
}

आउटपुट:

निर्माता और विध्वंसक

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

निर्माता और विध्वंसक

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

  1. इसके फ़ंक्शन का उपयोग करने के लिए कोड में iostream हेडर फ़ाइल शामिल करें।
  2. अपने कोड में std नामस्थान को शामिल करें ताकि उसे कॉल किए बिना उसकी क्लासों का उपयोग किया जा सके।
  3. ClassA नामक एक क्लास बनाएं.
  4. जिस सदस्य को हम बनाने जा रहे हैं उसे सार्वजनिक रूप से सुलभ के रूप में चिह्नित करने के लिए सार्वजनिक पहुंच संशोधक का उपयोग करें।
  5. क्लास के लिए एक कन्स्ट्रक्टर बनाएं.
  6. कन्स्ट्रक्टर को कॉल करने पर कंसोल पर प्रिंट करने के लिए टेक्स्ट। endl एक है C++ कीवर्ड, जिसका मतलब है अंतिम पंक्ति। यह माउस कर्सर को अगली पंक्ति पर ले जाता है।
  7. क्लास कन्स्ट्रक्टर के मुख्य भाग का अंत.
  8. क्लास के लिए एक डिस्ट्रॉक्टर बनाएं.
  9. जब डिस्ट्रक्टर को कॉल किया जाता है तो कंसोल पर प्रिंट करने के लिए टेक्स्ट। endl एक है C++ कीवर्ड, जिसका मतलब है अंतिम पंक्ति। यह माउस कर्सर को अगली पंक्ति पर ले जाता है।
  10. विध्वंसक के शरीर का अंत.
  11. कक्षा का अंत.
  12. main() फ़ंक्शन को कॉल करें। प्रोग्राम लॉजिक को इस फ़ंक्शन के मुख्य भाग में जोड़ा जाना चाहिए।
  13. एक क्लास ऑब्जेक्ट बनाएं और उसे a नाम दें। कन्स्ट्रक्टर को कॉल किया जाएगा।
  14. p नामक एक पूर्णांक चर बनाएं और उसे 1 का मान निर्दिष्ट करें।
  15. चर p का उपयोग करके एक if कथन ब्लॉक बनाएँ।
  16. एक क्लास ऑब्जेक्ट बनाएं और उसे b नाम दें। डिस्ट्रक्टर को कॉल किया जाएगा।
  17. if कथन के मुख्य भाग का अंत.
  18. main() फ़ंक्शन के मुख्य भाग का अंत.

सारांश

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