InheritancePart IV (Lecture 39)-W86GWWSvsr0 63.4 KB
Newer Older
Vandan Mujadia's avatar
Vandan Mujadia committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
C ++ में प्रोग्रामिंग के मॉड्यूल(Module) 24 में आपका स्वागत है।
 पिछले कुछ मॉड्यूल(Module) से हम C ++ में इनहेरिटेंस(Inheritance) के बारे में चर्चा कर रहे हैं।
 (रिफ़र स्लाइड टाइम: 00:38) हमने इनहेरिटेंस(Inheritance) की मूल परिभाषा और स्ट्रक्चर(structure) को समझा है और इस मॉड्यूल(Module) में इस संबंध में हम उन फोनों के पदानुक्रम(hieracrchy) के एक उदाहरण पर काम करने की कोशिश करना चाहते हैं जो आज हम उपयोग करते हैं।
 हम इस मॉड्यूल(Module) के दौरान यह दिखाना चाहते हैं कि, हम वास्तव में विभिन्न अवधारणाओं के अमूर्त रूप को कैसे ले सकते हैं, C ++ में उन लोगों के लिए क्लास(class) मॉड्यूल(Module) बनाने का प्रयास करें, उन्हें C ++ कोड(code) के संदर्भ में परिणामी पदानुक्रम(hieracrchy) व्यवस्थित करें और विस्तार के लिए संभावनाएं बनाएं।
 इसलिए, जैसा कि मैंने उल्लेख किया था कि रूपरेखा के संदर्भ में, हम जो इनहेरिटेंस(Inheritance) के बुनियादी स्तर पर चर्चा कर रहे हैं, उसकी पूरी रूपरेखा है, हम पहले ही OOAD मॉडलिंग में आईएसए(ISA) संबंध के बारे में बात कर चुके हैं जिसका उपयोग अक्सर किया जाता है और इसका उपयोग करके हमने दिखाया है कि दो या दो से अधिक सी ++ कक्षाओं के संदर्भ में आईएसए(ISA) संबंध को कैसे व्यक्त किया जाए, इसके आधार पर हमने डेटा(Data) सदस्यों(members) की इनहेरिटेंस(Inheritance), सदस्य(member) कार्यों(functions) की इनहेरिटेंस(Inheritance) के लिए विस्तृत शब्दार्थ को परिभाषित किया है।
 हमने देखा है कि जब एक क्लास(class) दूसरे आधार क्लास(class) से लिया जाता है तो यह सभी डेटा(Data) सदस्यों(members) और सदस्य(member) कार्यों(functions) को इनहेरिटेंस(Inheritance) में देता है।
 और सदस्य(member) कार्यों(functions) को उन्हें अधिलेखित करने के लिए एक ही हस्ताक्षर के साथ पुनर्परिभाषित किया जा सकता है या हम मौजूदा नाम से सदस्य(member) कार्यों(functions) की परिभाषाओं को प्रस्तुत कर सकते हैं या उस हस्ताक्षर फ़ंक्शन(function) को अधिभारित करने के लिए अलग-अलग हस्ताक्षर के साथ इनहेरिटेंस(Inheritance) में मिला नाम जो हम पहले कर सकते थे।
 इसके अलावा, हमने देखा है कि नए डेटा(Data) सदस्यों(members) को कैसे जोड़ा जाता है, हमने बेस क्लास से प्राप्त डेटा(Data) और सदस्य(member) क्लास(class) के कार्यों(functions) के एक्सेस(access) स्पेसिफिकेशन पर भी ध्यान दिया है, हमने एक नया एक्सेस(access) स्पेसियर(specifier) पेश किया है जिसे संरक्षित कहा जाता है, जिसमें व्युत्पन्न वर्गों(derived classes) के लिए विशेष शब्दार्थ है।
 व्युत्पन्न वर्गों(derived classes) के लिए, आधार के सभी संरक्षित डेटा(Data) सदस्य(member) सुलभ हैं, जबकि ये संरक्षित डेटा(Data) सदस्य(member) बाहरी कार्यों(functions) और अन्य वर्गों(classes) के लिए सुलभ नहीं हैं।
 हमने निर्माण और विनाश प्रक्रिया और वस्तु जीवन समय को भी देखा है।
 उन सभी धारणाओं का उपयोग करते हुए अब हम फोन के एक सेट के लिए एक बुनियादी मॉड्यूल(Module) स्ट्रक्चर(structure) के निर्माण पर चर्चा करेंगे।
 इसलिए, हम फोन के एक मॉडल पदानुक्रम(hieracrchy) के साथ शुरू करते हैं और हम बस यह मानकर शुरू करते हैं कि तीन प्रकार के फोन हैं जो हमारी दुनिया बनाते हैं।
 लैंडलाइन फोन(landline phone), सामान्य तौर पर जो हम 20 साल पहले इस्तेमाल कर रहे थे, 30 साल पहले।
 फिर मोबाइल फोन(mobile phone), तथाकथित आजकल जो अधिक बार एक गूंगा मोबाइल फोन(mobile phone) के रूप में कहा जाता है, जो केवल प्रतिबंधित कार्यों(functions) और हमारे जीवन में आक्रमण करने वाले सभी स्मार्टफ़ोन की विविधता के लिए कर सकता है।
 इसलिए, ऐसा करने की प्रक्रिया में, हम पहले हेल्पर वर्गों(classes) का एक सेट तैयार करेंगे, इन सहायक कक्षाओं में हमें उन विशेषताओं के लिए अलग-अलग प्रकार होंगे, जिन्हें हमें संभालना होगा, फिर हम प्रत्येक फोन को अलग से मॉडल करेंगे।
 इनमें से प्रत्येक के लिए, हम एक क्लास(class) विवरण की एक रूपरेखा लिखने की कोशिश करेंगे और फिर हम देखेंगे कि दिया गया है कि, इन फोनों में विशेषज्ञता के कुछ निहित पदानुक्रम(hieracrchy) हैं, हम इस कोड(code) को C ++ वंशानुक्रम पदानुक्रम(hieracrchy) में कैसे संयोजित करते हैं और यह कैसे करता है कुल मॉडल को सरल बनाएं।
 इसलिए, हमारे साथ शुरू करने के लिए हमारे पास पहले सहायक वर्गों(classes) का एक सेट है।
 इसलिए, मैंने इन वर्गों(classes) का विवरण शामिल नहीं किया है, आप उन लोगों को काम दे सकते हैं।
 स्वाभाविक रूप से एक क्लास(class) की जरूरत है कि हम निश्चित रूप से फोन नंबर का प्रतिनिधित्व करें और फोन नंबर जैसा कि हम जानते हैं कि भारत में, फोन नंबर देश कोड(code) सहित 12 अंकों के होते हैं।
 तो, यह राशि प्रकार है, जो 12 अंकों की संख्या प्रस्तुत करता है।
 फिर निश्चित रूप से हमें सब्सक्राइबर(subscriber) के नाम की आवश्यकता है, जो वास्तव में फोन की सदस्य(member) ता ले रहा है, हमें अपने संपर्कों के लिए भी नाम की आवश्यकता है, जिन लोगों को हम कॉल करना चाहते हैं।
 हमारे पास हमारे संपर्कों की तस्वीरें होने का प्रावधान है, इसलिए फोटो के रूप में कुछ सहायक क्लास(class) होगा जिसमें छवि होगी और छवि के लिए वैकल्पिक पाठ और इसी तरह हमारे पास एक क्लास डिफाइनिंग रिंगटोन(ringtone), ऑडियो फाइल(audio file) और उस रिंगटोन(ringtone) का नाम वगैरह होगा।
 हमारे पास संपर्क के लिए सहायक क्लास(class) होगा, संपर्क की न्यूनतम जानकारी एक फोन नंबर और नाम है और वैकल्पिक रूप से हमारे पास उस संपर्क का फोटो भी हो सकता है।
 बेशक, कई अन्य हैं जो संभव हैं, जैसे पदनाम, जैसे कंपनी और इसी तरह।
 हम अभी इसे सरल बनाए हुए हैं।
 अंत में, हमारे पास एक सहायक श्रेणी पता पुस्तिका होगी, जो शायद सेट या संपर्कों की सूची का एक संग्रह है, जिसे हम अपने फोन में बनाते और बनाए रखते हैं।
 इसलिए, ये बुनियादी सहायक वर्गों(classes) का सरल सेट थे, जो हमें डिजाइन के साथ आगे बढ़ने देते हैं।
 इसलिए, पहले हम लैंडलाइन फोन(landline phone) को मॉडल करना चाहते हैं।
 जब हम लैंडलाइन फोन(landline phone) को मॉडल करना चाहते हैं, तो हम पहचानते हैं कि अगर मेरे पास लैंडलाइन फोन(landline phone) है; हालाँकि, आदिम आप घूर्णन डायल के साथ उन काले भारी सेटों के बारे में सोच सकते हैं, जिनका उपयोग हम कई साल पहले करते हैं।
 बुनियादी कार्यक्षमता जो एक लैंडलाइन फोन(landline phone) का समर्थन करना चाहिए और कॉल करने की क्षमता और वापस बुलाए जाने की क्षमता है।
 तो, हमारे पास कॉल कार्यक्षमता है और हमारे पास एक उत्तर देने वाली कार्यक्षमता है, इसके बिना फोन परिभाषित नहीं है।
 इसलिए, अगर मेरे पास ऐसा है, तो जैसा कि हम इस फोन के लिए कक्षा डिजाइन करने पर जाते हैं, हम इस मॉडल को बनाने की कोशिश कर रहे हैं।
 मान लीजिए, मैंने इसे एक नाम लैंडलाइन फोन(landline phone) दिया है और कॉल की कार्यक्षमता के लिए, मैंने कक्षा में एक कॉल विधि, कॉल सदस्य(member) कार्य शुरू किया है और कॉल करने में सक्षम होने के लिए हमें उस नंबर की आवश्यकता है जिसे हमें कॉल करना है।
 तो, फोन नंबर इस कॉल सदस्य(member) फ़ंक्शन(function) का एक पैरामीटर होगा।
 इसी तरह, यदि कोई कॉल आता है तो हमें उस कॉल का जवाब देना होगा, एक सदस्य(member) फ़ंक्शन(function) का जवाब है जो फोन कॉल का जवाब देगा।
 डेटा(Data) सदस्यों(members) के संदर्भ में, हमें निश्चित रूप से प्रत्येक लैंडलाइन फोन(landline phone) की अपनी एक संख्या की आवश्यकता होती है, वह संख्या जिस पर इसे कहा जा सकता है।
 तो, हमारे पास एक नंबर सदस्य(member) होगा फोन किसी ने सब्सक्राइब किया होगा, इसलिए यह एक सब्सक्राइबर(subscriber) का नाम है और हमारे पास एक रिंगटोन(ringtone) हो सकती है, जो कि बहुत पुराने फोन के लिए तय की गई रिंगटोन(ringtone) होती है, जिसे हम आमतौर पर क्रिंक क्रिंक साउंड की तरह कहते हैं, फोन की गूंज ध्वनि।
 स्वाभाविक रूप से इसके आधार पर, हमें कंस्ट्रक्टर(constructor) को परिभाषित करने की आवश्यकता है, जो कम से कम नाम और संख्या और ग्राहक को ले जाएगा।
 इन दोनों सदस्यों(members) को फोन के किसी भी सार्थक निर्माण के लिए आरंभीकृत किया जाना है, इस रिंगटोन(ringtone) का आरंभ हम वैकल्पिक रख सकते हैं, जो कहते हैं कि डिफ़ॉल्ट रूप से इसमें कुछ विशिष्ट रिंगटोन(ringtone) हैं।
 अब, हमारे पास इस विशेष लैंडलाइन फोन(landline phone) ऑब्जेक्ट के बारे में जानकारी डालने के लिए फ्रेंड ऑपरेटर फ़ंक्शन(function) के संदर्भ में एक ओवरलोडिंग भी होगी।
 यह डीबगिंग और प्रोग्रामिंग ट्रेस उद्देश्यों के लिए अधिक आवश्यक है, फिर वास्तव में फोन की कार्यक्षमता।
 तो, यह एक सहायक कार्यक्षमता है, जिसे हम इस विशेष क्लास(class) के साथ काम करने में सक्षम होने के लिए एक मित्र फ़ंक्शन(function) के संदर्भ में जोड़ते हैं।
 चलिए अब हम मोबाइल फोन(mobile phone) पर बात करते हैं।
 निश्चित रूप से, मोबाइल फोन(mobile phone) में कॉल कार्यक्षमता होगी, एक उत्तर कार्यक्षमता होगी, कॉल कार्यक्षमता के संदर्भ में, आमतौर पर मोबाइल फोन(mobile phone) में, हम या तो नंबर को कॉल कर पाएंगे, जैसा कि हम लैंडलाइन फोन(landline phone) में कर सकते हैं, लेकिन यह है यह भी संभव है कि मोबाइल फोन(mobile phone) में किसी प्रकार का पता पुस्तिका तंत्र होगा, जिससे मैं संपर्कों का एक सेट रख सकता हूं और मैं नाम से कुछ संपर्क चुन सकता हूं और उस नाम से मैं उस संपर्क को कॉल कर सकता हूं।
 तो, कॉल के संदर्भ में हम देखते हैं, मोबाइल फोन(mobile phone) के दो विकल्पों के संदर्भ में, जिनमें से एक जिसे कॉल कर रहा है, वह लैंडलाइन फोन(landline phone) में उपलब्ध नहीं था।
 इसके अलावा हमारे पास आमतौर पर हमारे पास रिडायल(redial) करने का विकल्प होता है, आमतौर पर अंतिम संख्या को रिडायल(redial) करने के लिए और जिसे अधिकांश मोबाइल फोन(mobile phone) में हमारे पास रिंगटोन(ringtone) सेट करने का विकल्प भी होता है।
 इसलिए, यह निश्चित रूप से कई अन्य हैं जो हम सोच सकते हैं, लेकिन निश्चित रूप से मोबाइल फोन(mobile phone) द्वारा जैसा कि मैंने उल्लेख किया है कि मैं शुरुआती पीढ़ी की तरह के सेलुलर फोन के बारे में बात कर रहा हूं, जैसे कि आमतौर पर आप में से कई ने नोकिया 1100 श्रृंखला देखी और इस्तेमाल की होगी।
 इस तरह के फोन जहां आपके पास सिर्फ मोबाइल होने की क्षमता है, लेकिन आपके पास उन सभी अलग-अलग फैंसी फंक्शंस नहीं हैं जो आज हम देखते हैं।
 आइए हम इस सरल मोबाइल फोन(mobile phone) क्लास(class) के लिए देखें कि हम परिभाषा कैसे बनाते हैं, इसलिए हमने प्रत्येक कार्यक्षमता के लिए मोबाइल फोन(mobile phone) नाम के साथ क्लास(class) बनाया है, हम देखते हैं कि उन्हें कुछ सदस्य(member) कार्य करने होंगे।
 इसलिए, कॉल के लिए हमारे पास एक सदस्य(member) फ़ंक्शन(function) होगा, यह बहुत हद तक कॉल सदस्य(member) फ़ंक्शन(function) की तरह दिखता है जो हम लैंडलाइन फोन(landline phone) क्लास के लिए करते हैं, इसलिए जो फोन नंबर लेता है और कॉल करता है, लेकिन अब हम देखते हैं कि अतिरिक्त कार्यक्षमता है , मैं किसी को नाम से बुला सकता हूं।
 तो, हम एक और कॉल मेम्बर फ़ंक्शन(function) रखेंगे जो किसी व्यक्ति का नाम लेता है और कॉल करता है।
 इसलिए, हम देख सकते हैं कि कॉल फ़ंक्शन(function) के दोहरेपन के कारण, हम अतिभारित सदस्य(member) कार्यों(functions) को शुरू करने जा रहे हैं।
 हमारे पास एक उत्तर होगा, जो उत्तर सदस्य(member) कार्य है।
 हम किसी सदस्य(member) फ़ंक्शन(function) को रीडायल करने में सक्षम होने के लिए एक रेडियल सदस्य(member) फ़ंक्शन(function) का परिचय देते हैं।
 रिंगटोन(ringtone) सेट करने के लिए, जो निश्चित रूप से उस विशेष रिंगटोन(ringtone) को लेना होगा जिसे मैं सेट करना चाहता हूं और अपनी पता पुस्तिका में नए परिचितों को जोड़ने के लिए, मुझे एक ऐड संपर्क की आवश्यकता है, जहां मुझे संख्या निर्दिष्ट करने की आवश्यकता है और मुझे नाम निर्दिष्ट करने की आवश्यकता है व्यक्ति।
 इसलिए, इसके साथ हमारे पास ऐसा है, जैसा कि हम कक्षा का नाम तय करने के बाद शुरू करते हैं, ये पहली चीजें हैं जो हम पूरा करते हैं जो हमें इंटरफ़ेस(interface) देगा, जैसा कि हम कहते हैं कि इस क्लास(class) को क्या करना चाहिए जो एक बुनियादी कार्यक्षमता है क्लास(class), कक्षा के लिए संचालन का सेट।
 यह निर्दिष्ट करने के बाद, अब हम कक्षाओं के आंतरिक हिस्सों में देखते हैं, अगर मुझे इन सदस्य(member) कार्यों(functions) का समर्थन करना है, अगर मुझे उस कार्यक्षमता का समर्थन करना है जो मुझे चाहिए, तो डेटा(Data) सदस्यों(members) को क्या चाहिए जो मुझे चाहिए? निश्चित रूप से ऐसा होने पर, निश्चित रूप से मुझे उस फोन की संख्या की आवश्यकता है जो पहले की तरह है, मुझे इस विशेष मोबाइल फोन(mobile phone) तक पहुंचने के लिए एक सब्सक्राइबर(subscriber) नाम की आवश्यकता है, सदस्य(member)ता दी गई है और सभी संभावना में मोबाइल फोन(mobile phone) होने के कारण, इसमें विभिन्न रिंगटोन(ringtone) सेट करने की संभावना होगी इसलिए मेरे पास रिंगटोन(ringtone) सदस्य(member) हैं।
 इसलिए, ये बहुत पसंद हैं जो हमने पहले देखा था, लेकिन अब हमने मान लिया है कि यह संभव है कि हम अपने फोन में संदर्भ रखें।
 इसलिए, मुझे एक पता पुस्तिका की आवश्यकता है।
 तो, एक पुस्तक एक सदस्य(member) है जो रखेगा, जो एक पता पुस्तिका है जो यह है कि वह एक सूची या संपर्कों का एक सेट रखेगा जिसे मैं अक्सर समय पर संदर्भित करना चाहूंगा।
 इसलिए, अगर मैं एक ऐड कॉन्टैक्ट(add contact) करता हूं, जो मूल रूप से यहां कॉन्टैक्ट को जोड़ देगा और मुझे एक फीचर की भी आवश्यकता होगी, तो मुझे एक इंटरफेस प्रदान करना होगा, जिसे मैं रिडायल(redial) करना चाहूंगा, बस उस नंबर को रीडायल करना है जिसे मैंने आखिरी बार डायल किया था ।
 इसलिए, मुझे यह याद रखने के लिए एक सदस्य(member) की आवश्यकता है कि मैंने जो अंतिम नंबर डायल किया था, वह क्या है? इसलिए, जो इस डेटा(Data) सदस्य(member) को लाता है, इसके अलावा मुझे कुछ की आवश्यकता हो सकती है; इसलिए ये बुनियादी डेटा(Data) सदस्य(member) हैं जिन्हें मुझे इस कार्यक्षमता का समर्थन करने की आवश्यकता होगी और इसके अलावा मुझे कुछ और सदस्य(member) कार्यों(functions) की आवश्यकता होगी, उदाहरण के लिए, अगर मुझे लगता है कि हमें रीडायल कहने दें।
 इसलिए, यदि मैं रिडायल(redial) के बारे में सोचता हूं, यदि मुझे रिडायल(redial) करना है तो मुझे कॉल करने की आवश्यकता होगी; यह अंतिम डायल है।
 इसलिए, मुझे इस सदस्य(member) फ़ंक्शन(function) को कॉल करने की आवश्यकता होगी।
 इसलिए, मुझे कॉल करना होगा, रिडायल(redial) अंतिम डायल होगा और यह मेरी मूल रिडायल(redial) कार्यक्षमता होगी।
 इसलिए, मुझे इस डेटा(Data) सदस्य(member) को सेट करने के लिए एक तरीका चाहिए, मुझे इस डेटा(Data) सदस्य(member) को याद रखने का एक तरीका चाहिए।
 तो इसका क्या अर्थ है? इसका मतलब है कि जब मैं कुछ नंबर डायल कर रहा हूं, तो मैं कुछ नंबर पर कॉल कर रहा हूं जो मुझे याद रखना चाहिए।
 इसलिए, यदि मैं कॉल मेम्बर फंक्शन की कॉल फंक्शनलिटी को देखता हूँ, तो फ़ोन नंबर * टाइप के लिए कहें, तो मुझे जो आवश्यकता होगी वह इस विशेष अंतिम डायल फ़ंक्शन(function) को सेट करने के लिए है; अंतिम डायल नंबर इसलिए, यहां मैं इस सदस्य(member) फ़ंक्शन(function) को शामिल करता हूं जिसे मैं अपने कॉल विधि से लागू करूंगा।
 इसी तरह, जब मैं दूसरी कॉल को लागू करता हूं, तो ओवरलोड कॉल विधि भी मैंने इसे लागू कर दिया होगा, जो अंतिम डायल किए गए नंबर को सेट करेगा।
 अब, आपको आश्चर्य हो सकता है कि क्या मैं ऐसा करने के लिए अलग सदस्य(member) कार्य कर रहा हूं? दूसरा विकल्प यह करने के बजाय हो सकता है कि मैं केवल अंतिम डायल किया जा सकता था या अंतिम डायल असाइन किया गया था।
 मैं बस इसे पी पर सेट कर सकता था क्योंकि यह सभी मोबाइल फोन(mobile phone) क्लास(class) के समान नामस्थान में सभी के डोमेन में है।
 कारण यह है कि मुझे लगता है कि मेरे पास शुरू करने के लिए एक सदस्य(member) समारोह होगा क्योंकि यह संभव है कि जब मैंने यह अंतिम डायल नंबर सेट किया तो मैं कुछ और गुणों को अंतिम डायल नंबर के साथ रखना चाह सकता हूं, उदाहरण के लिए, मैं चाह सकता हूं यह भी याद रखना कि मैंने इस व्यक्ति को आखिरी बार कब डायल किया था।
 मैंशायद यह भी याद रखना चाहता है कि अंतिम कॉल का भाग्य क्या था, क्या यह याद किया गया था या यह छूट गया था और यदि यह गुजर गया था तो एक अवधि क्या है जिसके लिए मैंने कॉल किया था और इसी तरह।
 वास्तविक कार्यक्षमता को कई अलग-अलग तरीकों से बढ़ाया जा सकता है।
 इसलिए, यह केवल इस अंतिम डायल नंबर को सेट करने से बहुत अधिक हो सकता है।
 इसलिए, मैं सदस्य(member) कार्य के संदर्भ में यह मॉडल बनाने की कोशिश करता हूं।
 इसलिए, यह एक विशिष्ट शैली है जिसका हम अक्सर अनुसरण करने का प्रयास करेंगे, जब भी हम कुछ सदस्य(member), डेटा(Data) सदस्य(member) सेट करना चाहते हैं या कई बार हो सकता है कि कक्षा के सदस्य(member) फ़ंक्शन(function) के भीतर से भी कुछ डेटा(Data) सदस्य(member) प्राप्त कर सकते हैं, तो हम यह कल्पना कर सकते हैं कि क्या हम सीधे सेट करेंगे या हम उन्हें सेट करने के लिए कुछ निजी सदस्य(member) कार्यों(functions) का उपयोग करेंगे।
 ताकि यदि अतिरिक्त कार्यशीलता हो तो उन कार्यक्षमताओं को भी पूरा किया जा सके।
 अब, स्वाभाविक रूप से अगर हम इसे इस तरह से महसूस करते हैं, तो हमें मोबाइल फोन(mobile phone) क्लास में उपस्थित होने के लिए इस सदस्य(member) फ़ंक्शन(function) की आवश्यकता है और सवाल यह है कि यह सदस्य(member) फ़ंक्शन(function) सार्वजनिक रूप से होना चाहिए, जवाब नहीं है क्योंकि हम पहले से ही इंटरफ़ेस(interface) को परिभाषित किया है।
 यह वही है जो हम चाहते हैं कि इंटरफ़ेस(interface) वही हो जो अन्य बाहरी कक्षाएं और वैश्विक फ़ंक्शन(function) तक पहुंच सकें, क्योंकि आपके पास उस फ़ोन का एक दृश्य है जो आपके पास है।
 इसलिए, यदि आप एक भौतिक फोन के बारे में सोचते हैं, तो आपके पास कीबोर्ड या ग्राफिक्स डिस्प्ले, आपकी टच स्क्रीन, फोन पर इन सभी इंटरफ़ेस(interface) गतिविधियों को करने के लिए एक विकल्प है, लेकिन क्या आप वास्तव में कोई कार्यक्षमता देखते हैं जहां आप अंतिम डायल सेट कर सकते हैं संख्या, आप नहीं करते हैं क्योंकि आप ऐसा करने वाले नहीं हैं।
 यह फोन के लिए आंतरिक है और इसलिए, ऐसे सदस्य(member) कार्य निजी हैं और जैसा कि हम कहते हैं कि यह इंटरफ़ेस(interface) के लिए है, यह सदस्य(member) कार्य कार्यान्वयन के लिए हैं।
 तो, आप डिजाइन में आप इस अंतर को स्पष्ट रूप से ध्यान में रखने की आवश्यकता होगी।
 इसके समान मेरे पास एक और सदस्य(member) कार्य हो सकता है जैसे कि शो नंबर जब डायलिंग हुआ है जब आप किसी को कॉल कर रहे हैं तो आप उस नंबर को दिखाना चाहते हैं जिसे आपका कॉलिंग या जब कोई कॉल आया हो तो फोन बज रहा है और आप इसका जवाब देना चाहते हैं उस नंबर को देखने के लिए जो आपको कॉल कर रहा है।
 तो, ShowNumber() एक सदस्य(member) कार्य है जो यह सब व्यवहार करने वाला है।
 ऐसे कई अतिरिक्त सदस्य(member) कार्य होंगे जिनकी आपको आवश्यकता होगी, लेकिन मैं बस, मैं आपको इस तरह की व्याख्या करने के लिए दो उदाहरण प्रस्तुत कर रहा हूं कि कक्षा के निजी हिस्से में भी कई सदस्य(member) कार्य हो सकते हैं, जो मूल रूप से साकार करने के लिए कार्य का समर्थन कर रहे हैं इंटरफ़ेस(interface) और अन्य सहायक कार्य, जिन्हें आप सार्वजनिक स्थान पर संभव नहीं बनाना चाहते हैं।
 इसी तरह, हम इस कॉल के बारे में थोड़ी बात कर सकते हैं, जिसे मूल रूप से कॉल () नाम से एक व्यक्ति कहते हैं।
 इसलिए, अगर मेरे पास यह है तो हमें कौन सी कार्यक्षमताओं की आवश्यकता होगी? निश्चित रूप से, हमें जरूरत है, मुझे खेद है, यह n होना चाहिए।
 इसलिए, मुझे वास्तव में यह पता होना चाहिए कि इस व्यक्ति की संख्या कितनी है।
 इसलिए, मैं यह मानूंगा कि, मुझे पता पुस्तिका से नंबर क्यों आना है।
 इसलिए, मुझे यह मानकर चलना होगा कि पता पुस्तिका में किसी प्रकार की खोज() सदस्य(member) कार्यप्रणाली होगी, जिसमें एक नाम दिया गया हो और जो मुझे फोन नंबर देता हो।
 तो, मैं उस के संदर्भ में फोन नंबर वापस कर सकता हूं और एक बार जो वापस आ गया है तो मैं अन्य इंटरफ़ेस(interface) फ़ंक्शन(function) का उपयोग कर सकता हूं जो फोन नंबर के आधार पर कॉल कर सकता है।
 हम इस कॉल की वास्तविक कार्यक्षमता का एहसास करने के लिए उपयोग कर सकते हैं क्योंकि यदि आप इन दो अतिभारित सदस्य(member) कार्यों(functions) के बीच देखते हैं, तो बुनियादी कार्यक्षमता वह कॉल है जिसे पहले एक द्वारा महसूस किया गया है और आपकी कार्यक्षमता में जोड़ा गया वह खोजकर्ता है जिसे आप कॉल करना चाहते हैं और फिर एक कॉल करें जो कि यहां दूसरे फ़ंक्शन(function) द्वारा महसूस की गई है।
 तो, यह वह जगह है जहां आप खोज करने के लिए कोड(code) लिखते हैं और फिर आप वास्तव में कॉल करते हैं और इस तरह आपको डिजाइन करने के साथ आगे बढ़ना चाहिए और जैसा कि आप अपनी खोज को आगे बढ़ाते हैं कि मैंने कहा कि मैं आपको सहायक का विवरण नहीं दूंगा कक्षाएं क्योंकि उनके इंटरफेस, उनके सदस्य(member) कार्य आपके डिजाइन से प्राप्त होंगे क्योंकि हमने केवल एक पता पुस्तिका के लिए इस आवश्यकता को देखा है।
 हमने संपर्क पुस्तिका आदि को जोड़ने की आवश्यकता देखी है।
 तो, यह सब अलग-अलग इंटरफ़ेस(interface) विधियों को प्राप्त करेगा जो पता पुस्तिका क्लास(class) में होना चाहिए।
 इसी तरह के तर्क से आप अन्य सहायक वर्गों(classes) की विभिन्न इंटरफ़ेस(interface) आवश्यकताओं को भी पा सकते हैं।
 तो, हमारे पास मोबाइल फोन(mobile phone) क्लास(class) का काफी विस्तार से वर्णन है।
 तो, आइए हम मोबाइल फोन के संबंध में स्मार्ट फोन(smart phone) पर चलते हैं, मैंने स्मार्ट फोन(smart phone) को बहुत ही सरल रखा है; यह टच स्क्रीन द्वारा कॉल कर सकता है।
 स्मार्ट फोन(smart phone) में आमतौर पर टचस्क्रीन होने की विशेषता होती है।
 इसलिए, पहले मैं मोबाइल फोन से कीपैड(keypad) के साथ कॉल कर रहा था।
 अब, मैं एक टच स्क्रीन के साथ कॉल कर रहा हूं, बुनियादी कार्यक्षमता समान है।
 इसलिए, अब मैं डिजाइन आवश्यकताओं और कक्षा के डिजाइन को एक साथ दिखा रहा हूं।
 तो, मूल आवश्यकता वही रहती है कि मैं एक नंबर पर कॉल करता हूं या मैं एक नाम कहता हूं, लेकिन मुझे फिर से इन दोनों को रखने की आवश्यकता होगी, ये अतिभारित हैं, लेकिन अब आपको यह महसूस करना शुरू करना चाहिए कि ये ओवरराइडिंग की संभावनाओं की परिस्थितियां हैं यहाँ उत्पन्न हो रहा है क्योंकि मेरे पास एक ही कार्यक्षमता है जो एक फ़ोन नंबर को कॉल करने में सक्षम है, लेकिन उस कार्यक्षमता में जो बदल रहा है वह इस फ़ंक्शन का कार्यान्वयन है।
 पहले यह कीपैड(keypad) के द्वारा होता था, अब यह टच स्क्रीन द्वारा होता है।
 मेरे पास जवाब है, रीडायल ये सभी ऐसे हैं जैसे हम मोबाइल फोन के लिए चर्चा करते हैं।
 AddContact() के संदर्भ में, अब इसमें टचस्क्रीन(touch screen) स्मार्ट डिस्प्ले(smart display) है।
 इसलिए, मुझे संभवतः अपने संपर्कों की तस्वीरों को भी जोड़ना होगा।
 इसलिए, इंटरफ़ेस बहुत समान दिखता है, हालांकि इसे पुन: क्रियान्वयन की आवश्यकता हो सकती है, ये डेटा सदस्य वही हैं जो हमने मोबाइल फोन में किए थे।
 ये विधियां, निजी विधियां भी समान हैं, लेकिन मेरे पास उदाहरण के लिए अतिरिक्त डेटा सदस्य हो सकते हैं, अगर यह एक स्मार्ट फोन(smart phone) है तो स्मार्ट फोन(smart phone) खोजने का एक प्रमुख मानदंड प्रदर्शन का आकार है, क्या यह 7 इंच का फोन है, यह है एक छह और आधा इंच फोन और इतने पर।
 इसलिए, मैं आकार देना चाहूंगा, जब मैं कॉल कर रहा हूं या मैं एक कॉल का उत्तर दे रहा हूं तो मैं उस व्यक्ति का चेहरा देखना चाहूंगा जिसे मैं कॉल कर रहा हूं या जो मुझे कॉल कर रहा है, बशर्ते वह व्यक्ति मेरी पता पुस्तिका में हो।
 तो, संभवतः मेरे पास स्मार्ट फोन(smart phone) में एक निजी सदस्य फ़ंक्शन के रूप में डिस्प्ले फोटो() जैसी कार्यक्षमता होगी, कई अन्य भी हो सकते हैं।
 तो, ये लैंडलाइन, मोबाइल और स्मार्ट फोन(smart phone) के बुनियादी वर्ग विवरण हैं।
 तो, यह उनकी अलग कार्यक्षमता का सारांश है और जैसा कि हमने पहले देखा था कि सामान्यीकरण विशेषज्ञता का एक मजबूत अर्थ है जो इन वर्गों(classes) के बीच इन अवधारणाओं के बीच मौजूद है।
 इसलिए, हम जल्दी से यह निष्कर्ष निकाल सकते हैं कि हमारे पास मोबाइल फोन(mobile phone) आईएसए(ISA) लैंडलाइन फोन(landline phone) और स्मार्ट फोन(smart phone) आईएसए(ISA) मोबाइल फोन(mobile phone) है और अब हम कुल कार्यक्षमता को देख सकते हैं।
 कि, अगर अब हम लैंडलाइन फोन(landline phone) क्लास और मोबाइल फोन(mobile phone) क्लास(class) के उस डिजाइन को रखते हैं और उन्हें साइड से देखते हैं, तो हम देखते हैं कि कई डेटा(Data) सदस्य(member) हैं जो मूल रूप से सामान्य हैं, लेकिन वहां अन्य जो नए हैं।
 इसी तरह, कुछ तरीके हैं जो सामान्य हैं, कुछ तरीकों में नए हस्ताक्षर की आवश्यकता है और कई अन्य तरीके हैं जो नए हैं।
 इसलिए, इस अवलोकन के साथ, हम वास्तव में उन्हें एक पदानुक्रम(hieracrchy) के संदर्भ में संयोजित करने की योजना बना सकते हैं और हमारे पास डिज़ाइन को कम कर सकते हैं।
 ये आपको केवल यूएमएल(UML) मॉडल के संदर्भ में कैसे दिखते हैं? यह आपकी आगे की समझ के लिए है।
 लेकिन अब, मैं इस अवलोकन का उपयोग न केवल मोबाइल फोन(mobile phone) और लैंडलाइन फोन(landline phone) को अलग-अलग करने के लिए कर सकता हूं, बल्कि मैं मोबाइल फोन(mobile phone) आईएसए(ISA) लैंडलाइन फोन(landline phone) के रूप में भी कर सकता हूं।
 इसलिए, मैं यहां इनहेरिटेंस(Inheritance) का परिचय देता हूं, जिस क्षण मैं यहां इनहेरिटेंस(Inheritance) का परिचय देता हूं, इन डेटा(Data) सदस्यों(members) की आवश्यकता मौजूद नहीं है क्योंकि वे आधार क्लास(class) में मौजूद हैं और स्वचालित रूप से इनहेरिटेंस(Inheritance) में मिल जाएंगे, इन सदस्यों(members) को निश्चित रूप से जोड़ा जाता है।
 इसी तरह, जब मैं ऐसा करता हूं तो मुझे लगता है कि जैसा कि हमने चर्चा की है कि जिस तरह से उत्तर दिया जा रहा है, उसके संदर्भ में हमारे पास कोई विशेष अंतर नहीं है, हम सिर्फ कॉल उठाते हैं और बात करना शुरू करते हैं।
 इसलिए, मुझे यह अनुभव हो सकता है कि लैंडलाइन फोन(landline phone) में आप जिस तरह से जवाब देते हैं और जिस तरह से आप मोबाइल फोन(mobile phone) में जवाब देते हैं, वही हैं।
 तो, यह टिप्पणी की गई है जिसका अर्थ है कि यह विशेष कार्य लैंडलाइन फोन(landline phone), मूल क्लास(class) से इनहेरिटेंस(Inheritance) में मिलेगा, लेकिन कॉल के संदर्भ में हमें अभी भी इस हस्ताक्षर को परिभाषित करने की आवश्यकता है कि हमें ओवरराइड करने की आवश्यकता है क्योंकि कॉल करने का तरीका बहुत अलग होगा , उदाहरण के लिए, एक लैंडलाइन फोन(landline phone) जो मैं सिर्फ एक मोबाइल में डायल का उपयोग कर सकता हूं।
 मैं निश्चित रूप से उपयोग कर रहा हूं मैं एक डायल का उपयोग नहीं कर रहा हूं मैं निश्चित रूप से किसी प्रकार के कीपैड कीबोर्ड का उपयोग कर रहा हूं और आगे मुझे कॉल () फ़ंक्शन(function) के एक और संस्करण की आवश्यकता है जैसा कि हमने उल्लेख किया है और इसका मतलब होगा कि मेरे पास यहां एक अधिभार है।
 तो, इसके साथ मोबाइल फोन(mobile phone) क्लास(class) का डिजाइन और सरल हो जाता है।
 हम इसका उपयोग आगे जाने और स्मार्ट फोन(smart phone) के साथ अब संबंधित करने के लिए कर सकते हैं।
 मैं उस स्मार्ट फोन(smart phone) आईएसए(ISA) मोबाइल फोन(mobile phone) को मॉडल करने की कोशिश कर रहा हूं।
 तो, स्मार्ट फोन(smart phone) एक मोबाइल फोन(mobile phone) है जिसे मैं इनहेरिटेंस(Inheritance) बनाता हूं, इन पर पहले टिप्पणी की गई थी क्योंकि वे लैंडलाइन फोन(landline phone) से आम थे।
 स्मार्ट फोन(smart phone) में, इन सदस्यों(members) को भी आवश्यक नहीं है।
 इन डेटा(Data) सदस्यों(members) और विधियों और भी आवश्यक नहीं है क्योंकि वे मोबाइल फोन(mobile phone) से इनहेरिटेंस(Inheritance) में मिलेंगे, लेकिन मुझे डेटा(Data) सदस्य(member) और सदस्य(member) फ़ंक्शन(function) को जोड़ने की आवश्यकता है जो स्मार्ट फोन(smart phone) के लिए विशिष्ट हैं।
 इन स्वाभाविक रूप से उत्तर आने से इनहेरिटेंस(Inheritance) में मिला है, लेकिन मोबाइल फोन(mobile phone) में अतिभारित कॉल फ़ंक्शन(function) के इन दोनों संस्करणों को फिर से ओवरराइड करने की आवश्यकता है।
 अब, हम देख सकते हैं कि यह ओवरराइड किया गया था और इसे फिर से ओवरराइड किया जा रहा है क्योंकि जिस तरह से आप टचस्क्रीन के माध्यम से कॉल करते हैं वह काफी अलग है।
 तो, यहाँ मोबाइल के मामले में यह स्मार्ट फोन(smart phone) के मामले में ओवरलोड था।
 यह अब उस परिभाषा से ओवरराइड हो गया है जिसे आपने मोबाइल फोन(mobile phone) में इस्तेमाल किया था, आप इंटरफ़ेस(interface) को और अधिक नहीं बदल रहे हैं, लेकिन आपके पास निश्चित रूप से एक अलग कार्यान्वयन होगा और इन सभी अतिरिक्त कार्यों(functions) को निश्चित रूप से इनहेरिटेंस(Inheritance) में मिला है।
 बेशक ReDial() को भी ओवरराइड करने की आवश्यकता है क्योंकि यदि आपकी कॉल को रीड्रीड किया गया है तो कॉल फ़ंक्शन(function) का एक और संस्करण है।
 इसलिए, इसको एक साथ रखा जाए, अब हमारे पास यदि मैं उन्हें संयोजित करता हूं तो हमारे पास एक लैंडलाइन फोन(landline phone) है, हमारे पास एक मोबाइल फोन(mobile phone) है जो लैंडलाइन फोन(landline phone) विशेषज्ञता है।
 हमारे पास एक स्मार्ट फोन(smart phone) है जो मोबाइल फोन(mobile phone) का एक विशेषीकरण है और इस तरह से क्लास इंटरफ़ेस(interface) कैसा दिखेगा और मैं यहाँ क्या करता हूँ, मैं अब यहाँ इस पर चर्चा नहीं करूँगा क्योंकि हम सभी C ++ के साथ तैयार नहीं हैं इस पर चर्चा करने के लिए सुविधाएँ है।
 अगर हमारे पास इस तरह की एक पदानुक्रम(hieracrchy) है तो इसे कैसे आगे सामान्य करना है और बस एक फोन की अवधारणा को देखना है।
 तो, एक फोन की मूल अवधारणा है कि मैं कॉल कर सकता हूं, मैं जवाब दे सकता हूं, और मैं रीडायल कर सकता हूं।
 तो, क्या मैं एक सार फोन के बारे में सोच सकता हूं, जो सभी प्रकार के फोन का सामान्यीकरण है।
 इसलिए, मैं लैंडलाइन फोन(landline phone) आईएसए(ISA) फोन कहता हूं जो सभी प्रकार के फोन का एक अमूर्त हिस्सा है।
 फिर एक मोबाइल फोन(mobile phone) आईएसए(ISA) लैंडलाइन फोन(landline phone) और स्मार्ट फोन(smart phone) आईएसए(ISA) मोबाइल फोन(mobile phone) और इतने पर और आपके पदानुक्रम(hieracrchy) की जड़ में इस तरह के अमूर्त को परिभाषित करने में सक्षम होने के बहुत सारे फायदे हैं जो मॉड्यूल(Module) में हमारी चर्चा का विषय होगा।
 बहुरूपता, लेकिन यह वह है जो दिखाता है कि आप पूर्ण फोन पदानुक्रम(hieracrchy) बना सकते हैं और सिर्फ आपके लिए मेरा मतलब है अगर अभी भी, अगर यह बहुत सीधा दिखता है तो यह बहु स्तरीय सरल पदानुक्रम(hieracrchy) है।
 फिर फोन क्या दिखते हैं, इसके संदर्भ में अपना ध्यान कुछ और अधिक यथार्थवादी बनाना चाहते हैं।
 तो, आपके पास एक लैंडलाइन फोन(landline phone) है, जो एक ताररहित हाथ सेट फोन हो सकता है या यह स्पीकर फोन हो सकता है।
 जब आपके पास एक मोबाइल फोन(mobile phone) होता है तो यह कॉर्डलेस फोन के साथ-साथ स्पीकर फोन भी होता है क्योंकि आप इसका उपयोग दोनों तरफ से कर सकते हैं, ऐसे वीडियो फोन हैं जो इन दिनों उतारे जाते हैं।
 इसलिए, जहां आप वास्तव में वीडियो कॉल कर सकते हैं और फिर आपके पास स्मार्ट फोन(smart phone) हैं जो हमने देखे गए मोबाइल फोन(mobile phone) के विशेषीकरण के रूप में हैं, लेकिन वे फिर से विशिष्ट हैं कि क्या वे आई-फोन या एंड्रॉइड फोन हैं या मुझे किसी तरह का टैबलेट मिल सकता है फोन जो स्मार्ट फोन(smart phone) के साथ-साथ वीडियो फोन आदि के रूप में इस्तेमाल किया जा सकता है।
 इसलिए, मैं सिर्फ सुझाव देता हूं कि इन पदानुक्रम(hieracrchy) के आधार पर हम घर पर प्रयास कर सकते हैं और C ++ वंशानुक्रम वर्गों(classes) के समान सेट का निर्माण करने की कोशिश कर सकते हैं जो इस पदानुक्रम(hieracrchy) का प्रतिनिधित्व कर सकते हैं।
 इसलिए, संक्षेप में हम इसका उपयोग कर सकते हैं फोन पदानुक्रम(hieracrchy) यहाँ दिखाने के लिए, कैसे एक वास्तविक स्थितियों के लिए प्रभावी C ++ कोड(code) मॉडल बनाने के लिए इनहेरिटेंस(Inheritance) का उपयोग किया जा सकता है।