2014-06-13 5 views
30

मैं संरचना और कक्षा के बीच के अंतर के बारे में बहुत उलझन में था क्योंकि मुझे लगता था कि उन्हें बहुत अधिक चीजों के लिए उपयोग किया जाता था। मैंने मतभेदों को गुमराह किया और मैंने देखा कि एकमात्र उत्तर यह था कि structs के पास डिफ़ॉल्ट रूप से सार्वजनिक सदस्य होते हैं और कक्षाओं में डिफ़ॉल्ट रूप से निजी सदस्य होते हैं। हालांकि, मेरे व्याख्याताओं ने मुझे अभी बताया है कि structs में सदस्य कार्य नहीं हो सकते हैं। लेकिन मैंने इंटरनेट पर कई धागे देखे हैं जहां लोग structs में सदस्य कार्य शामिल करते हैं और विशेष रूप से कहते हैं कि ऐसा करने के लिए ठीक है।क्या सी ++ स्ट्रक्चर में सदस्य कार्य हो सकते हैं?

मेरे व्याख्याता अशिष्ट लगते हैं कि परिभाषा के आधार पर संरचनाओं में कार्य नहीं हो सकते हैं, तो क्या चल रहा है? एकमात्र चीज जो मैं सोच सकता था वह यह है कि शायद कंपाइलर किसी संरचना के भीतर किसी अन्य चीज़ के कार्यों को बदलता है ताकि वे तकनीकी रूप से कार्य न करें ... क्या इन विरोधाभासों का स्पष्ट उत्तर है?

+7

शायद उनका मतलब सी – chris

+23

यदि यह एक सी ++ कोर्स माना जाता है, तो इसे तुरंत छोड़ दें। – aschepler

+3

अपने व्याख्याताओं को इस दस्तावेज़ में इंगित करें। https://isocpp.org/files/papers/N3797.pdf - सी ++ मानक, अध्याय 9 का कामकाजी मसौदा। शब्द वर्ग और संरचना का उपयोग ज्यादातर विनिमयशील रूप से किया जाता है। अनुच्छेद 3 में एक सदस्य समारोह के साथ एक संरचना का एक उदाहरण भी है। –

उत्तर

6

आपका व्याख्याताओं प्रमाण्य गलत हैं, यह मानते हुए वे वास्तव में सी ++ के बारे में नहीं सी

यह कोड में अपने आप को यह साबित, या The C++ Programming Language लेने और structs को देखने के लिए तुच्छता आसान है बात कर और कर रहे हैं।

32

मैंने मतभेदों को गुमराह किया और मैंने देखा कि एकमात्र उत्तर यह था कि structs के पास डिफ़ॉल्ट रूप से सार्वजनिक सदस्य होते हैं और कक्षाओं में डिफ़ॉल्ट रूप से निजी सदस्य होते हैं।

हाँ, यह सही है। इसके अलावा, एक संरचना के आधार डिफ़ॉल्ट रूप से सार्वजनिक रूप से विरासत में प्राप्त होते हैं, जबकि कक्षा के आधार डिफ़ॉल्ट रूप से व्यक्तिगत रूप से विरासत में प्राप्त होते हैं।

संरचना के सदस्य के रूप में एक फ़ंक्शन घोषित करना आपके द्वारा नोट किए गए अंतर को छोड़कर, एक वर्ग के सदस्य के रूप में कार्य घोषित करने के समान ही अर्थशास्त्र है। प्रत्येक मामले में उन्हें सदस्य फ़ंक्शन कहा जाता है।

+5

यह सही उत्तर है। * केवल * कक्षा और संरचना के बीच अलग-अलग दृश्यता है। – user3344003

2

सी ++ structsdefinitely have member functions कर सकते हैं। दूसरी ओर, सी structs, एक बहुत अलग जानवर हैं - वे अनिवार्य रूप से सरणी हैं जो कुछ इंडस्ट्रीज के लिए नाम और प्रकार की जानकारी प्रदान करते हैं।

1

ऐसा लगता है कि सिर्फ इसलिए कि किसी भाषा द्वारा किसी चीज़ की अनुमति है इसका मतलब यह नहीं है कि यह एक अच्छा विचार है। हालांकि तकनीकी रूप से एक सी ++ संरचना में कार्य हो सकते हैं, मुझे नहीं लगता कि संरचना डेटा प्रकार का मूल उद्देश्य कार्यों को शामिल करना था। क्या डेटा को परिभाषित करने के लिए क्लास प्रकार शुरू करने का मुख्य उद्देश्य नहीं था और निकटतम बुनाई संबंध में डेटा पर कार्य करने वाले तर्क, इस प्रकार डेटा में स्वस्थ इंटरफेस को बढ़ावा देना?

+1

यह दानव रूप से झूठा है। स्ट्रॉस्ट्रॉप ने खुद कई अवसरों पर इतना कहा है। अन्य उत्तरों में उल्लिखित एक संरचना और एक वर्ग समान है। –

+1

तो फिर भाषा में कक्षाएं क्यों जोड़ें? क्यों न केवल structs का उपयोग करें .... मैं कभी भी सी ++ का बड़ा प्रशंसक नहीं रहा क्योंकि यह बहुत जटिल लगता है ... पैर में खुद को शूट करने के कई तरीकों से। भाषा में दो लगभग समान कीवर्ड होने के कारण एक बुरा विचार लगता है ... निश्चित रूप से नई भाषाओं ने ऐसा नहीं किया है। पाइथन चीजों को करने के लिए एक और केवल एक स्पष्ट रूप से सही तरीका प्रदान करता है और जो खुद को अधिक रखरखाव कोड में उधार देता है।शायद स्ट्रॉस्ट्रॉप ने उन्हें उद्देश्य पर लगभग समान बना दिया ... यदि हां, तो मैं कहता हूं, "मुझे भ्रमित करने के लिए उसके लिए शर्मिंदा है" :) – Travis

+0

http://www.thealmightyguru.com/Humor/Docs/ShootYourselfInTheFoot.html – Travis

संबंधित मुद्दे