2016-07-28 18 views
8

operator int() yerine tanımlanmış operator+C++ yerine operatörün) operatörü İnt (kullanarak +

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"); 
} 

benim çıkış çağrılır neden anlamaya çalışıyorum geçerli:

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

Senin * sorunun nedir *? – MikeCAT

+2

@MikeCAT İlk sırada. Belirsiz nedir? – Rotem

+3

Operatör int() 'işlevini kaldırın ve neden olduğunu veya en azından derleyicilerle ve bunların varsayılan seçenekleriyle birlikte olduğunu göreceksiniz. – chris

cevap

9

Kişisel ifadesi D(1)+D(2) içerir geçici nesneler. Yani O yazdırır 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"; 
} 

tarafından almaya operator+ sizi küçük imzasını değiştirmek zorunda: cout bunu yazdırmak için doğru aşırı bulurken

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

operator int çağrılır.