2014-09-04 4 views
0
#include <iostream> 

using namespace std; 

class armon { 
    int a; 
    int b; 

public: 
    armon(int newA, int newB) : a(newA), b(newB) {} 

    armon setA(int newA) { 
     a = newA; 
     return *this; 
    } 

    armon setB(int newB) { 
     b = newB; 
     return *this; 
    } 

    void print(void) { cout << a << endl << b; } 
}; 

int main() { 
    armon s(3, 5); 

    s.setA(8).setB(9); 

    s.print(); 
} 
  1. 왜 난 그냥 계단식 함수 호출을 할 수있는이 포인터 객체를 반환 할 수 있습니까?
  2. 왜 개체의 참조를 반환해야합니까?
  3. 그게 뭐라해도 될까요?
+1

'setA'와'setB'에서'armon &'을 돌려주는 것이 더 낫습니다. – NetVipeC

+0

좋습니다.하지만 –

+0

은 참조를 반환하지 않고 다음 호출이 클래스의 내부 상태를 수정하기 때문에 수정 사항이 원래 개체에 유지되지 않기 때문입니다. '참조없이'당신은 객체의 복사본을 반환하고, '참조는 같은 객체를 반환합니다.' – NetVipeC

답변

6

this 포인터를 반환하는 것으로 충분합니다. 그러나 계단식 호출의 구문은 체인의 중간에 변경해야 :

s.setA(8)->setB(9)->setC(10); 

이 일관성있는 모양, 그래서 참조를 반환하는 것은 더 나은 선택하지 않습니다.

+0

코드가 작동하지 않습니다. setA는 this 포인터를 무시한 포인터를 반환하지 않습니다. –

+0

@ArmonSafai 제 코드는 여러분의 제안에 따라 리턴 타입이 변경되었다고 가정합니다 (즉,'armon *'을 반환하고, 마지막에'return this '와 함께). – dasblinkenlight