2012-10-10 2 views
1

저는 대학생으로서 자바에서 C++로 전환합니다. 우리는 대부분 내가 얻는 과부하 연산자에 대해 소개되었지만, 과제를 위해 나는 어려움을 겪었습니다. 기본 질문 :오버로드 할 수 없으므로 object1 = 0이됩니다.

Weight w1(-5, 35), w2(5, -35), w3(2, 5), w4(1), w5, w6; 
//later on in main 
cout << "(w5 = 0) is " << (w5 = 0) << endl; 

내 체중 개체는 1 온스에 1 파운드를 포함합니다. 내 프로그램이이 줄에 오면 w5는 이미 (0,0)으로 설정되어 있지만 w5를 인쇄하면 주소가 너무 길어집니다. 여기에 내가 특정 과부하 .H 및 통화 당에있는 코드 = 내가 할 수 없습니다 포럼에서 배운

//Weight.h 
Weight& operator=(const int); 

//Weight.cpp 
Weight& Weight::operator=(const int number) 
{ 
Weight changer(number); //constructs weight object with one int to (int, 0) 
return changer; 
} 

= 친구 과부하가 나를 위해이 개 인수에 걸릴 수있다이다 함수. 어떤 도움이라도 대단히 감사합니다!

//code for my << overload 
ostream& operator << (ostream& output, const Weight& w) 
{ 
switch(w.pounds) 
{ 
    case 1: 
    case -1: 
     output << w.pounds << "lb"; 
     break; 
    case 0: 
     break; 
    default: 
     output << w.pounds << "lbs"; 
     break; 
} 
switch(w.ounces) 
{ 
case 1: 
case -1: 
    output << w.ounces << "oz"; 
    break; 
case 0: 
    break; 
default: 
    output << w.ounces << "ozs"; 
    break; 
} 

if (w.pounds == 0 && w.ounces == 0) 
{ 
    output << w.ounces << "oz"; 
} 

return output; 
} 
+0

'operator <<'에 대한 오버로드를 볼 수 있습니까? – slugonamission

+0

컴파일에 문제가 없지만 여기에 w5 = 0에 대한 인쇄물이 있습니다. – Elliott

+0

죄송합니다. 질문을 잘못 읽었습니다. 귀하의'<<'오버로드가 올바르지 않은 것 같습니다. – slugonamission

답변

4
//Weight.cpp 
Weight& Weight::operator=(const int number) 
{ 
    Weight changer(number); //constructs weight object with one int to (int, 0) 
    return changer; 
} 

이것은 잘못된 것입니다, 당신은 임시 객체에 대한 참조를 반환합니다. 이 개체는 범위를 벗어나 잘못된 결과를 얻습니다.

일반적으로 operator=은 할당이므로 개체 자체의 상태를 변경하려고합니다. 그러므로 일반적으로 다음과 같이 보일 것입니다 :

//Weight.cpp 
Weight& Weight::operator=(const int number) 
{ 
    // whatever functionality it means to assign the number to this object 
    return *this; 
} 
+0

킬러. 나는 내가 주소를 되찾고 있었다는 것을 알고 있었다. 그러나 나는 내가 시력을 잃어 버렸던만큼 오랫동안 벽에 머리를 치고 있었다라고 생각한다. 이것은 완벽하게 작동했습니다. 정말 고마워! – Elliott

관련 문제