क्या यह कहना सही है कि एक चर एक डेटा प्रकार का एक उदाहरण है?


9

(जो कार्यक्रम के दौरान इसका मूल्य बदल सकता है)

या वर्गों और वस्तुओं से कड़ाई से 'कुछ का उदाहरण' है? यदि हां, तो C ++ की बात आने पर आप 'वैरिएबल' की अवधारणा को कैसे परिभाषित करेंगे?


C # और Java दो दिलचस्प तरीकों से C ++ से अलग हैं। सबसे पहले, वे वस्तु (और संरचना) प्रकारों के साथ आदिम प्रकारों को एकजुट करने का प्रयास करते हैं (ताकि आप इंट के उदाहरण के बारे में बात कर सकें), जबकि सी ++ नहीं करता है। दूसरा, C # और Java में, ऑब्जेक्ट प्रकारों के वेरिएबल्स उदाहरणार्थ (कक्षाओं में) ढेर के संदर्भ में हैं और यह भी कि हम ऑब्जेक्ट के लिए पॉइंटर्स के बारे में बात नहीं करते हैं, जबकि C ++ में, @ coredump का जवाब, ऑब्जेक्ट प्रकारों के स्थानीय वेरिएबल्स जैसे हैं। स्टैक पर उदाहरणों के लिए बाइंडिंग हैं, और हम स्पष्ट रूप से वस्तुओं और पॉइंटर्स के बीच वस्तुओं में अंतर करते हैं।
एरिक इद्ट

जवाबों:


8

जहां तक ​​मुझे पता है, यह विजुअल स्टूडियो के मैनुअल से उस प्रकार के आदिम प्रकार के उदाहरणों को देखने के लिए सही है (उदाहरण के लिए "सी ++ टाइप सिस्टम" देखें , लेकिन मैं अभी भी एक अन्य स्रोत की तलाश कर रहा हूं), हालांकि मेरा मानना ​​है कि यह शब्द है ज्यादातर वस्तुओं पर चर्चा करते समय उपयोग किया जाता है। एक ऑब्जेक्ट एक वर्ग C का एक उदाहरण है अगर इसे एक निर्माणकर्ता से वर्ग C या उसके किसी उपवर्ग में परिभाषित किया गया था।

C ++ में एक चर एक रनटाइम अवधारणा नहीं है। यह आपके संकलक के अंदर चर के नाम और एक सार (यदि नहीं तो कांस्टेबल) स्थान के बीच एक बाध्यकारी बंधन के रूप में मौजूद है। एक बार एक कार्यक्रम संकलित करने के बाद, चर अब नहीं हैं। इसके बजाय, डेटा को रजिस्टरों, मेमोरी आदि में पढ़ा और लिखा जाता है।


2
" आदिम प्रकारों के मूल्यों को आमतौर पर उस प्रकार के उदाहरण नहीं कहा जाता है; यह वस्तुओं और वर्गों के लिए आरक्षित है। " यह बिल्कुल सच नहीं है। मानक में कहीं भी आदिम प्रकार की वस्तुओं को नहीं माना जाता है। न ही यह किसी उपयोगकर्ता द्वारा परिभाषित वर्ग या एक आदिम प्रकार के आधार पर किसी भी तरह से परिवर्तनशील की परिभाषा है।
निकोल बोलस

@NicolBolas मैंने कभी भी किसी को पूर्णांक के रूप में C ++ के संदर्भ में किसी चीज के उदाहरणों के रूप में नहीं सुना है, और मुझे पूरा यकीन है कि यह कहना सही है कि वे किसी भी चीज के उदाहरण नहीं हैं भले ही मानक स्पष्ट रूप से उल्लेख न करें। यदि नहीं, तो वे किसके उदाहरण हैं? मैं यह भी नहीं देखता कि यह उत्तर कहां दावा करता है कि एक चर की परिभाषा आदिम प्रकार और वस्तुओं के बीच बदल जाती है; ऐसा प्रतीत होता है (सही ढंग से) यह दावा करते हुए कि "उदाहरण" का बस एक चर की परिभाषा से कोई लेना-देना नहीं है।
इक्ष्रेक

2
@Ixrec: " यदि नहीं, तो वे किस प्रकार के उदाहरण हैं? " प्रकार int। C ++ मानक प्राइमरी प्रकार और गैर-आदिम प्रकारों के बीच अंतर नहीं करता है जब चर घोषणाएं करते हैं। तो T t;प्रकार की एक वस्तु की घोषणा करता है T, चाहे कोई भी प्रकार Tहो।
निकोल बोलस

1
@Ixrec: ध्यान दें कि शाब्दिक एक अलग तरह की चीज है। साहित्य एक प्रकार का प्रचलन है। लेकिन आप शाब्दिक चर नहीं बना सकते, इसलिए यह एक अलग चर्चा है।
निकोल बोलस

5

या वर्गों और वस्तुओं से कड़ाई से 'कुछ का उदाहरण' है? यदि हां, तो C ++ की बात आने पर आप 'वैरिएबल' की अवधारणा को कैसे परिभाषित करेंगे?

सी ++ के लिए इसे यथासंभव संक्षिप्त रूप से रखने के लिए

  • रनटाइम पर निर्धारित की जाने वाली मेमोरी में स्थान के लिए एक चर (कोड में) एक नाम है।
  • एक उदाहरण एक ऑब्जेक्ट है जो रनटाइम में मेमोरी में रहता है।

केवल स्पष्ट करने के लिए:

  • मेमोरी के सभी क्षेत्रों में ऑब्जेक्ट नहीं होते हैं। उदाहरण के लिए, स्मृति के कुछ क्षेत्रों में 'कचरा' मान हो सकते हैं।
  • सभी मेमोरी स्टोर करने वाली वस्तुओं को कोड में नाम नहीं दिया गया है। ऑब्जेक्ट स्मृति के गैर-नाम वाले क्षेत्रों में निवास कर सकते हैं जैसे कि किसी सरणी में एक स्थिति, या कहीं पर एक सूचक द्वारा संदर्भित हीप
  • जब स्मृति के एक क्षेत्र में कचरा होता है, तो यह आमतौर पर या तो इसलिए होता है क्योंकि उस स्थान पर कोई वस्तु नहीं डाली गई है, या क्योंकि पहले से मौजूद कोई वस्तु नष्ट हो गई है।

1
POD C ++ में ऑब्जेक्ट हैं। स्मृति के सभी क्षेत्र वस्तु नहीं हैं, लेकिन POD केवल स्मृति के क्षेत्र नहीं हैं।
निकोल बोलस

1
मैं दूसरा निकोलबोलस: पीओडी ऑब्जेक्ट हैं। हालाँकि, आपके पास एक बिंदु है जब आप एक नए malloc()'एड' के बारे में बात करते हैं , लेकिन असिंचित बफर: यह एक स्मृति क्षेत्र है जो अभी तक एक वस्तु नहीं है। इसी तरह, एक वस्तु जो स्पष्ट रूप से नष्ट हो गई है: यह एक स्मृति क्षेत्र है जो अब कोई वस्तु नहीं है।
सेंटास्टर - मोनिका

@ निचलोलस निष्पक्ष टिप्पणी, मैंने उस शब्द को थोड़ा बदल दिया है
बेन

1

खैर, "सही" का क्या अर्थ है?

अगर हम इसके बारे में अति-सख्त होना चाहते हैं, तो हमें इसमें अंतर करने की आवश्यकता है:

  • वाक्य रचना पक्ष: भाव है (स्थिर) प्रकार
  • अर्थ विज्ञान पक्ष: वस्तुओं हैं उदाहरणों की कक्षाएं

तो फिर एक चर से किया जा रहा एक अभिव्यक्ति-होगा है एक प्रकार है। इसका मूल्य — वह वस्तु जो इसे संदर्भित करता है - कुछ वर्ग का उदाहरण होगा। और ध्यान दें कि चर का प्रकार और वस्तु का वर्ग आम तौर पर एक ही चीज नहीं होते हैं - चर का स्थिर प्रकार वस्तुओं के रनटाइम कक्षाओं पर एक ऊपरी सीमा रखता है , ताकि वर्गों को उस वर्ग का एक उपप्रकार होना चाहिए जो प्रकार से मेल खाती है।

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


1

जब तक आप अपना पूरा जीवन पवित्रता और परिष्कार में बिताना चाहते हैं ... हाँ।

हर बार जब आप कुछ ऐसा रखते हैं, जो विशिष्ट रूप से पहचाने जाने योग्य अन्य चीजों को बनाने के लिए एक उपयोग की पहचान करता है जो आप कर रहे हैं।

  • एक परियोजना उत्पादों में तुरंत
  • एक स्रोत त्वरित निष्पादन में
  • एक प्रकार में एक तात्कालिक संकेत।
  • चर में एक प्रकार का तात्कालिकता।

उन तात्कालिकता में से कुछ में अधिक सटीक नाम हो सकते हैं, लेकिन सामान्य तौर पर यह काम करता है।


0

कई लोग कक्षाओं के उदाहरणों के लिए "उदाहरण" आरक्षित करते हैं। यदि आप ऐसा करते हैं तो C ++ में, एक वैरिएबल एक वर्ग का उदाहरण हो सकता है, उदाहरण के लिए एक संदर्भ, उदाहरण के लिए एक संकेतक, या एक आदिम प्रकार (आप उस संदर्भ में कक्षाओं के रूप में संरचना की गणना कर सकते हैं, वे लगभग हैं पूरी तरह से वही)। जावा या ऑब्जेक्टिव-सी में, चर कभी उदाहरण नहीं होंगे, लेकिन संभवतः उदाहरणों के संदर्भ भी होंगे।

भूल गए: थोड़े समय के लिए, C ++ पॉइंटर कच्ची मेमोरी के लिए एक पॉइंटर हो सकता है, उदाहरण के लिए, कंस्ट्रक्टर को निष्पादित करने से पहले "यह"। आप संभवतः इस बिंदु पर अभी तक एक उदाहरण नहीं कहेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.