2012-06-09 12 views
9

मैं the C++ FAQ पढ़ रहा था। वहाँ मैंने पाया ऑपरेटर ओवरलोडिंग के लिए दिशानिर्देश में एक बिंदु का उपयोग करता है:ओवरलोडिंग ऑपरेटर का महत्व -() मुफ्त फ़ंक्शन के रूप में और सदस्य फ़ंक्शन नहीं?

आप रचनात्मक ऑपरेटरों प्रदान करते हैं, वे जहां वर्ग एक एकल पैरामीटर ctor है बाएं हाथ संकार्य (कम से कम इस मामले में के प्रचार की अनुमति चाहिए जो स्पष्ट कीवर्ड के साथ चिह्नित नहीं है)। उदाहरण के लिए, यदि आपकी कक्षा फ्रैक्शन इंट से फ्रैक्शन (गैर-स्पष्ट सीटीआर फ्रैक्शन :: फ्रैक्शन (इंट) के माध्यम से पदोन्नति का समर्थन करता है), और यदि आप दो-फ्रैक्शन ऑब्जेक्ट्स के लिए एक्स-वाई को अनुमति देते हैं, तो आपको 42-y की अनुमति भी देनी चाहिए। प्रैक्टिस में इसका मतलब है कि आपका ऑपरेटर-() फ्रैक्शन का सदस्य फ़ंक्शन नहीं होना चाहिए। आम तौर पर आप इसे एक दोस्त बना देंगे, अगर इसे जनता में मजबूर करने के अलावा किसी अन्य कारण के लिए नहीं: वर्ग का हिस्सा, लेकिन यहां तक ​​कि अगर यह कोई मित्र नहीं है, तो यह सदस्य नहीं होना चाहिए।

लेखक ने लिखा है कि ऑपरेटर-() सदस्य कार्य नहीं होना चाहिए?

यदि मैं ऑपरेटर-() सदस्य कार्य के रूप में और अन्य परिणाम क्या हैं तो क्या खराब परिणाम हैं?

+0

ध्यान दें कि शीर्षक गलत है: 'ऑपरेटर()' को एक मुक्त फ़ंक्शन के रूप में लागू नहीं किया जा सकता है। अधिकांश ऑपरेटर कर सकते हैं, लेकिन सभी नहीं। उद्धरण 'ऑपरेटर-' के साथ सौदा करता है, न कि 'ऑपरेटर() ' –

+0

संभावित डुप्लिकेट [ऑपरेटर << को मित्र के रूप में या सदस्य फ़ंक्शन के रूप में लागू किया जाना चाहिए?] (Http://stackoverflow.com/questions/236801/Should -ऑपरेटर-ए-ए-ए-दोस्त-ए-ए-ए-सदस्य-फ़ंक्शन) –

उत्तर

16

यहाँ एक सदस्य समारोह के रूप में ऑपरेटर के साथ Fraction है:

class Fraction 
{ 
    Fraction(int){...} 

    Fraction operator -(Fraction const& right) const { ... } 
}; 
इसके साथ

, इस मान्य कोड है:

Fraction x; 
Fraction y = x - 42; 

और x.operator-(Fraction(42)) को इसके समकक्ष; लेकिन यह नहीं है:

Fraction z = 42 - x; 

क्योंकि 42 यह (जाहिर है, इसकी भी नहीं एक वर्ग) में कोई सदस्य समारोह operator - है।

हालांकि, यदि आप अपने ऑपरेटर को एक मुफ्त फ़ंक्शन के रूप में घोषित करते हैं, तो रूपांतरण संचालन इसके दोनों तर्कों पर लागू होते हैं। तो यह

Fraction z = 42 - x; 

इस

Fraction z = Fraction(42) - x; 

जो operator-(Fraction(42), x) के बराबर है में बदल जाता है।

+0

... क्या आप यहां मुफ्त फ़ंक्शन का अर्थ विस्तृत कर सकते हैं? क्या आप दोस्त का काम कहने का मतलब है? –

+0

@ अभिषेक गुप्ता: नहीं, मुझे _free function_ कहना था। एक _ फ्री फ़ंक्शन_ एक नामस्थान स्कोप पर एक फ़ंक्शन है, जो _member function_ के विपरीत है। –

+0

कृपया मुझे बताएं कि रचनात्मक ऑपरेटरों का क्या अर्थ है? –

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