[질문]연산자 재정의에 대하여...

dufmadlek의 이미지

class CMemory
{
public:
  int operator[] ( int iIndex );
};

int CMemory::operator[] (int iIndex )
{
  int iResult = 0;
  // ...
  return iResult;
}

int main( int argc, char** argv )
{
  CMemory mm;
  printf("%d\n", mm[1] ); // (1)

  CMemory* pMm = new CMemory;
  printf("%d\n", pMm[1] ); // (2)
 return 0;
}

(1)번은 잘 되는데요. (2)번처럼 호출하는 방법이 있나요?
pMm->operator[](1) 이렇게 말구요.[/code]

chadr의 이미지

연산자가의 주체가 객체인데 해당 객체에 연산자가 있으면 그 연산자가 실행되는데 연산자의 주체가 포인터라면 기본적인 포인터에 대한 연산이 우선시 되는 모양이군요..
아래같이 하면 되긴 됩니다..

(*pMm)[1]

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

dufmadlek의 이미지

그렇군요...
감사합니다. ^^

doldori의 이미지

chadr wrote:
연산자가의 주체가 객체인데 해당 객체에 연산자가 있으면 그 연산자가 실행되는데 연산자의 주체가 포인터라면 기본적인 포인터에 대한 연산이 우선시 되는 모양이군요..

정확히 말하면 피연산자가 클래스형이냐 포인터형이냐는 별로 관계가 없습니다.
단순히 연산자의 우선순위 문제입니다. subscription([])이 dereference(*)보다
우선순위가 높기 때문입니다.