2011-08-23 13 views
9

मेरा सी ++ शिक्षक सोचता है कि * मानक सी ++ में * ऑपरेटर "पहले से अधिभारित" है, क्योंकि इसका संदर्भ संदर्भ के आधार पर संकेत या गुणा का मतलब हो सकता है।क्या सी ++ * ऑपरेटर "पहले ही अधिभारित है?"

वास्तव में, कई सी ++ (और सी) ऑपरेटरों को पहले से ही अतिभारित रहे हैं: वह सी ++ प्राइमर प्लस, जिसमें कहा गया है से मिला है। उदाहरण के लिए, * ऑपरेटर, जब किसी पते पर लागू होता है, उस पते पर संग्रहीत मूल्य उत्पन्न करता है। लेकिन * दो संख्याओं को लागू करने से मूल्यों का उत्पाद मिलता है। सी ++ यह तय करने के लिए कि कौन सी कार्रवाई करने के लिए ऑपरेटरों की संख्या और प्रकार का उपयोग करता है। (पृष्ठ 502, 5 एड)

कम से कम एक अन्य पाठ्यपुस्तक ज्यादा एक ही कहते हैं। जहां तक ​​मैं कह सकता हूं, यह सच नहीं है; यूनरी * बाइनरी * से एक अलग ऑपरेटर है, और जिस तंत्र द्वारा संकलक उन्हें असंबद्ध करता है उसके पास ऑपरेटर अधिभार के साथ कुछ लेना देना नहीं है।

कौन सही है?

+3

आप सही हैं। एक मायने में, यह कहना उचित है कि बिल्टिन ऑपरेटर पहले से ही अपने तर्कों के आधार पर बहुलक रूप से कार्य करते हैं। यह स्थिर polymorphism – sehe

+7

ध्यान दें कि दो '*' ऑपरेटरों (जो अंग्रेजी अर्थ में "ओवरलोडिंग" है, लेकिन सी ++ भावना में नहीं) के अलावा, अंतर्निहित बाइनरी '*' वास्तव में सी ++ भावना में भी अधिभारित है यह विभिन्न प्रकारों पर लागू होता है - 'int', 'double' आदि - विभिन्न प्रभावों के साथ। ऑपरेटर ओवरलोड रिज़ॉल्यूशन के प्रयोजनों के लिए प्रभावी ओवरलोड का सेट मानक में 13.6/12 पर परिभाषित किया गया है।इसी प्रकार प्रत्येक सूचक प्रकार (13.6/6) और फ़ंक्शन पॉइंटर प्रकार (/ 7) के लिए प्रभावी रूप से असाइन '*' प्रभावी रूप से अधिभारित होता है। –

उत्तर

12

दोनों सही हैं क्योंकि सवाल संदर्भ और शब्द अधिभार के अर्थ पर निर्भर करता है।

"ओवरलोडिंग" "समान प्रतीक, अलग अर्थ" का एक सामान्य अर्थ ले सकता है और "*" के सभी उपयोगों को संकेत और गुणा, और किसी भी उपयोगकर्ता द्वारा परिभाषित व्यवहार सहित अनुमति देता है।

"ओवरलोडिंग" का उपयोग सी ++ के आधिकारिक ऑपरेटर अधिभार कार्यक्षमता पर लागू करने के लिए किया जा सकता है, जिस स्थिति में संकेत और गुणा वास्तव में अलग हैं।

परिशिष्ट: नीचे दिए गए स्टीव की टिप्पणी देखें पर "ऑपरेटर overoading" versues "टोकन अधिक भार"।

+15

तो "अधिभार" शब्द भी अधिभारित है। –

+7

सटीक होने के लिए, मुझे लगता है कि पूर्व अर्थ के साथ यह '*' टोकन है जिसे ओवरलोड किया गया है, न कि '*' ऑपरेटर। यह विभाजित करने के लिए एक बहुत ही अच्छे बाल हैं, हालांकि, मैं कहता हूं कि यह टोकन सिर्फ इसलिए है क्योंकि यूनरी '*' का उपयोग करके अभिव्यक्ति का व्याकरण बाइनरी '*' का उपयोग करके अभिव्यक्ति के व्याकरण से अलग है। आप कल्पना कर सकते हैं कि वे दोनों 'ऑपरेटर * (...)' में बदल गए हैं, एक के लिए एक तर्क और द्विआधारी के लिए दो, इस मामले में यह 'ऑपरेटर *' नामक एक ओवरलोडेड फ़ंक्शन की तरह व्यवहार करता है। यह बिल्कुल नहीं है कि अंकगणितीय अभिव्यक्ति को परिभाषित करने के लिए मानक कैसे होता है। –

+1

@ स्टेव मैं पूरी तरह सहमत हूं और उस परिशुद्धता की तरह हूं। मैं अपना जवाब उस पर ले जाऊंगा। :) –

2

मुझे विश्वास है कि आप हैं। Dereference सेशन और बहु। ओप अलग ऑपरेटरों हैं, भले ही इसे लिखा हो। वही +, -, ++, -, और किसी अन्य के लिए जाता है मैं भूल गया होगा।

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

1

यह अर्थ में अतिभारित है कि एक ही चरित्र (अन्य अंतर्निहित प्रकार, आदि के साथ जैसे संकेतक भिन्नता, int रों के बीच गुणा, गुणा) विभिन्न स्थानों में अलग अलग बातें मतलब करने के लिए प्रयोग किया जाता है।

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

तो ... आप दोनों सही हैं :-)

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