2013-04-21 7 views
5

सी # में यह निश्चित रूप से संभव है, इस compilable उदाहरण के रूप में दिखाया जा सकता है:क्या मेरे पास संदर्भ द्वारा एक तर्क पारित करने वाला एक फ़ंक्शन/विधि हो सकता है और C++ में मान द्वारा इसे ओवरलोड कर सकता है?

static void Teste(int x) { } 
static void Teste(ref int x) { } 
static void Teste() 
{ 
    int i = 0; 
    Teste(i); 
    Teste(ref i); 
} 


लेकिन यह सी में किया जा सकता ++ (/ CLI) एक निर्माता के साथ? नीचे दिए गए उदाहरण देखें:

class Foo 
{ 
    Foo(int bar) 
    { 
     // initializing "Foo" instance... 
    } 
    Foo(int &bar) 
    { 
     // initializing "Foo" instance... 
    } 

    //... 
} 

हालांकि इस वर्ग के इन निर्माताओं के साथ संकलित करता है मैं कैसे चयन करने के लिए जब मैं एक लागू नहीं देख सकते हैं अन्य, कि है, कॉल ambiguos है, के रूप में ऐसा कोई कीवर्ड रहा है इस उद्देश्य के लिए सी # में "रेफरी" के रूप में जानें। मैंने इसे एक कन्स्ट्रक्टर में करने की कोशिश की, जहां नाम कक्षा के समान होना चाहिए (बेशक मैं एक बेकार पैरामीटर जोड़ सकता हूं, लेकिन मैं जानना चाहता हूं कि मैं ऐसा नहीं कर सकता हूं)।

बीटीडब्लू, मैं गुगल हो गया और केवल चीजें मिल गईं "रेफरी और मूल्य से गुज़रने के बीच क्या अंतर है?" लेकिन इस तरह अधिभार को कवर करने वाला कुछ भी नहीं। और मुझे लगता है कि कामकाज के रूप में मैं सूचक का उपयोग कर सकता हूं, "पता" (&) के लिए धन्यवाद; या जैसा ऊपर बताया गया है, एक अतिरिक्त बेकार पैरामीटर है। लेकिन मैं क्या जानना चाहता हूं: क्या मुझे इनके जैसे अधिभार (मूल्य/मूल्य से) हो सकता है?

अग्रिम धन्यवाद,

+0

एक पॉइंटर को एक और एक मूल्य को पास करके रचनाकारों को प्रारंभ करने का प्रयास करें और देखें कि आपको – smac89

+0

क्या मिलता है यह एक डुप्लिकेट हो सकता है, लेकिन मेरी रक्षा में, मैं बहुत अच्छी तरह से खोज नहीं करता; इसके अलावा, दूसरे प्रश्न का नाम बहुत आकर्षक नहीं है (हालांकि इसका नाम भी कम है)। इसके अलावा, एक sidenote के रूप में, दूसरे आदमी पूछता है कि यह समझ में आता है, मैं पूछता हूं कि यह संभव है। – JMCF125

उत्तर

1

आप ++ इच्छित प्रकार का सुस्पष्ट डाली प्रदान करके सी में कुछ इसी तरह पूरा कर सकते हैं।

struct Foo 
{ 
    Foo(int /*bar*/) {} 
    Foo(int &/*bar*/) {} 
}; 


int main() 
{ 
    int value = 5; 
    Foo foo(static_cast<const int&>(value)); 

    return 0; 
} 

const लिए डाली एक गैर स्थिरांक संदर्भ लेने निर्माता अनदेखी करने के लिए अधिभार संकल्प का कारण होगा और मूल्य से गुजर पर निपटारा करेगा।

+0

क्यों ** ** ** int और 'const? क्यों न केवल 'int' 'काम करता है? – JMCF125

+1

@ जेएमसीएफ 125 क्योंकि गैर-कॉन्स रेफ अभी भी कन्स्ट्रक्टर को मूल्य से पारित किया जा सकता है। –

+0

यह अजीब है: यह काम कर रहा था, लेकिन अब मैंने इसे फिर से परीक्षण किया और यह नहीं है! अब यह इसे 'const int &' से 'const int' में परिवर्तित करने लगता है ... – JMCF125

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

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