2016-07-28 8 views
8

मैं क्यों operator int() परिभाषित operator+सी ++ ऑपरेटर के बजाय) ऑपरेटर पूर्णांक (का उपयोग कर +

class D { 
    public: 
     int x; 
     D(){cout<<"default D\n";} 
     D(int i){ cout<<"int Ctor D\n";x=i;} 
     D operator+(D& ot){ cout<<"OP+\n"; return D(x+ot.x);} 
     operator int(){cout<<"operator int\n";return x;} 
     ~D(){cout<<"D Dtor "<<x<<"\n";} 
}; 

void main() 
{ 
    cout<<D(1)+D(2)<<"\n"; 
    system("pause"); 
} 

मेरी उत्पादन के बजाय शुरू हो जाती है समझने की कोशिश कर रहा हूँ है:

int Ctor D 
int Ctor D 
operator int 
operator int 
3 
D Dtor 2 
D Dtor 1 
+0

आपका * प्रश्न * क्या है? – MikeCAT

+2

@ माइककैट यह पहली पंक्ति में है। अस्पष्ट क्या है? – Rotem

+3

'ऑपरेटर int()' हटाएं और आप देखेंगे कि क्यों, या कम से कम आपको अधिकांश कंपाइलर्स और उनके डिफ़ॉल्ट विकल्पों के साथ चाहिए। – chris

उत्तर

9

आपका अभिव्यक्ति D(1)+D(2) शामिल अस्थायी वस्तुओं। तो तुम से const-ref

#include <iostream> 
using namespace std; 

class D { 
    public: 
     int x; 
     D(){cout<<"default D\n";} 
     D(int i){ cout<<"int Ctor D\n";x=i;} 
     // Take by const - reference 
     D operator+(const D& ot){ cout<<"OP+\n"; return D(x+ot.x);} 
     operator int(){cout<<"operator int\n";return x;} 
     ~D(){cout<<"D Dtor "<<x<<"\n";} 
}; 

int main() 
{ 
    cout<<D(1)+D(2)<<"\n"; 
} 

यह प्रिंट लेने के लिए operator+ की आप हस्ताक्षर बदलना होगा: जबकि cout करने के लिए इसे बाहर मुद्रण के लिए सही अधिभार खोजने

 
int Ctor D 
int Ctor D 
OP+ 
int Ctor D 
operator int 
3 
D Dtor 3 
D Dtor 2 
D Dtor 1 

operator int शुरू हो जाती है।

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