#27. CObArray 클래스

MFC에서 자료를 담는 클래스 중에는 실제로 그 클래스들의 배열을 만든 배열 클래스가 별도록 존재합니다. 그런 배열 클래스들의 기초 템플릿 (형식)이 되는 클래스가 바로 CObArray 클래스입니다. 이 CObArray 클래스를 쓸 줄 알게 되면 나머지는 그 자료형의 특성을 잘 파악하여 CObArray에 사용했던 그대로 이용하면 됩니다.



  • int CObArray::GetSize() const; : 해당 배열에 담겨진 데이터 버퍼들의 수를 구합니다. 예를 들어 5개 배열이 포함되어있으면 여기서는 4를 출력하는데, 리턴되는 정수값은 0부터 시작되는 값입니다.
  • int CObArray::GetUpperBound() const; : 해당 배열의 가장 마지막 배열 번호를 구합니다. 이 함수의 리턴값 역시도 0 기반의 정수값이며, 만약 리턴값이 -1이면 해당 배열 객체에 아무런 내용이 없음을 의미합니다.
  • void CObArray::SetSize(int nNewSize, int nGrowBy = -1); : 해당 배열에 최대로 저장될 수 있는 배열의 갯수를 수동으로 지정합니다. 첫 번째 파라미터는 갯수를 이야기하며, 두 번째 파라미터는 몇 번째 배열부터 자동으로 작업이 이루어질지를 결정하는 부분으로 생략하면 처음부터 데이터가 등록되도록 수행됩니다. 또한 예외 처리를 위하여 throw(CMemoryException); 으로 예외 사항을 던질 수 있습니다.
  • void CObArray::FreeExtra(); : 사용하지 않는 소모되는 나머지 버퍼들을 모두 해제시켜 메모리를 절약할 수 있는 함수입니다.
  • void CObArray::RemoveAll(); : 배열 전체의 데이터를 한 꺼번에 날려버릴 때 사용합니다. 신중을 기해서 사용해야만 합니다.
  • CObject* CObArray::GetAt(int nIndex) const; : nIndex 번째 배열로부터 값을 추출해 옵니다. 리턴형은 CObject* 형으로 배열이 담고 있을 데이터 형이 어떤 것인지에 따라서 다음과 같이 달라지게 됩니다.



    • BYTE CByteArray::GetAt(int nIndex) const;
    • DWORD CDWordArray::GetAt(int nIndex) const;
    • void* CPtrArray::GetAt(int nIndex) const;
    • CString CStringArray::GetAt(int nIndex) const;
    • UINT CUIntArray::GetAt(int nIndex) const;
    • WORD CWordArray::GetAt(int nIndex) const;


  • void CObArray::SetAt(int nIndex, CObject* newElement); : nIndex 번째 배열에 CObject* newElement 데이터를 직접 대입합니다. 어떤 데이터형을 담는 배열인지에 따라서 다음과 같이 달라지게 됩니다.



    • void CByteArray::SetAt(int nIndex, BYTE newElement);
    • void CDWordArray::SetAt(int nIndex, DWORD newElement);
    • void CPtrArray::SetAt(int nIndex, void* newElement);
    • void CStringArray::SetAt(int nIndex, LPCTSTR newElement);
    • void CUIntArray::SetAt(int nIndex, UINT newElement);
    • void CWordArray::SetAt(int nIndex, WORD newElement);


  • CObject& operator[](int nIndex);
  • CObject operator[](int nIndex) const; : 이것은 연산자 오버로딩으로서 CStringArray의 사용 예제를 들어서 설명해 보도록 하겠습니다.



    CStringArray m_strADatas;


    m_strADatas.SetSize(50);


    for(int i=0; i<50; i++)


    {



      switch(i)


      {


      case 0:



        m_strADatas[i].Format(“This is an example how to use CStringArray Object. And It is %dst element.”, i);


        break;


      case 1:



        m_strADatas[i].Format(“This is an example how to use CStringArray Object. And It is %dnd elements.”, i);


        break;


      case 2:



        m_strADatas[i].Format(“This is an example how to use CStringArray Object. And It is %drd elements.”, i);


        break;


      default:



        m_strADatas[i].Format(“This is an example how to use CStringArray Object. And It is %dth elements.”, i);


        break;


      }


    }



이와 같은 Array 클래스 외에도 리스트 클래스등이 있는데 그것은 다음 강좌에서 설명하겠습니다.

댓글 남기기