2011-11-22 2 views
0
class Demo 
{ 

     int num; 
     public: 
       Demo setMyValue(Demo *objx) 
       { 
        cout<<"\nEnter a number"; 
        cin>>(*objx).num; 
        return *objx; 
       } 
       ... 
}; 
  1. 문장의 의미는 무엇인가 "(* objx) .num을"아래의 맥락에서?"(* objx) .num;"의 의미는 무엇입니까? 이러한 맥락에서

  2. 이 입력 방식을 프로그램에서 사용하는 것이 좋은 프로그래밍 습관입니까?

+3

왜 5 가지 프로그래밍 언어로 질문에 태그를 지정 했습니까? 대부분이 데모 코드에 적합하지 않습니까? –

+1

1) 'objx- num'과 동일합니다. 2) 아니요. C++에서 원시 포인터를 사용하지 마십시오. –

+0

@ 존스 스케 (JonSkeet) - 나는 그것을 핥고 다른 것을 제거 할 수있었습니다. –

답변

1

포인터 역 참조 연산자입니다.

그러나 먼저 NULL을 확인하지 않고이 작업을 수행하는 것은 좋지 않습니다.

0

*은 역 참조 연산자입니다. 마찬가지로 objx->num (objx != NULL)을 제공 할 수 있습니다. 또한, 이것은 훌륭한 스타일입니다. 대부분의 사람들은 가독성을 위해 objx->num을 사용하지만, 궁극적으로 (*objx).num은 동등합니다. 그러나 개체 자체의 복사본을 반환하려면 return *objx이 필요합니다.

+0

감사합니다 ... 나는 그것을 시도하고 그것은 효과가! – tkg

0

다른 이들은 # 1을 포인터 역 참조 연산자로 정의했습니다.

Re : 2 : 이것은 사용자가 오도하고 아마도 메모리 누수가 발생할 수있는 시도 인 것처럼 보이지만, fluent interface에서 시도한 것처럼 보입니다.

Demo a = ...; 
Demo b = ...; 

a = a.setMyValue(b); // <- could be a leak 
+0

거기에 'operator ='가 없으면 메모리 누수가 없습니다. 객체의 복사본을 반환하는 것은 다소 이상한 일입니다. –

+0

@MikeSeymour : C++은 아주 약합니다. 'a = a.setMyValue (b)'가'b' (실제로'b'를 가리 키도록 변경) 할 때 원래의'a'는 어떻게 될까요? –

+1

동일한 메모리를 사용하여 새 값으로 덮어 씁니다. 'new'로 객체를 만들고 삭제하는 것을 잊어 버리면 메모리 누수가 발생합니다. –

관련 문제