본문 바로가기
프로그래밍 언어/C++

C++ 5단원 복습! (2편)

by 조엘 2020. 3. 22.

안녕하세요. 파피몬입니다.

 

이 복습 내용은 최호성 선생님의 "이것이 C++이다"를 공부하고 작성하였습니다. 

아직 모르는 게 많은 학생이라 오개념이 있을 수 있습니다. 친절하게 댓글로 알려주시면 좋은 공부 될 것 같습니다!!

5단원에서는 연산자 다중정의에 대해서 배워봅니다. 1편, 2편으로 나누어져 있습니다.

 

Chapter 5. 연산자 다중정의

 

 

6. 배열 연산자를 다루기 전, const가 지정하는 대상이 무엇인지 정확히 인지할 필요가 있다. 

 ** http://egloos.zum.com/chideout/v/4158795 정리가 잘 되어 있는 이 포스팅을 통해 공부하였다. 

 

 ** const class_name operator+( const class_name&) const { } 라는 메소드가 있다고 가정하자. 

 객체 A, B, C를 선언해 주고 A=B+C; 를 수행한다고 가정하자. 

const : 연산을 완료한 후 return 값이 변하지 않도록 해준다 

const : 피연산자에 영향을 준다. 위의 예시에서는 C. C의 멤버변수는 const에 의해 수정이 불가능해 진다.

const : { } 내에서 호출 객체에 영향을 준다. 위의 예시에서는 B. B의 멤버변수는 const에 의해 수정이 불가능해 진다. 

결과적으로, const 예약어가 사용되면, 그 데이터는 수정이 불가능한 READ-ONLY 데이터라고 생각하면 될 듯 하다!

 

 

7. 배열 연산자는 상수형(const) 참조를 통한 접근을 포함해 두 가지 방법으로 정의된다. 사용자 함수 영역에서 자체 정의된 함수로 배열을 <const + 참조자 형식>으로 넘기는 경우가 많으니, const로 배열이 넘어오는 경우에 대해서 함수를 작성할 줄 알아야 한다. 

 ** 일반 객체는 const 매개변수, 일반 매개변수 둘 다로 넘어갈 수 있다. 

 ** 상수 객체는 const 매개변수로만 넘어간다!

 ** 이를 인지하고 아래 코드를 바라보면 이해하기 쉽다. 

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

class CIntArray
{
private:
    int *m_pnData;
    int m_nSize;
    
public:
    CIntArray(int nSize)
    {
        m_pnData = new int[nSize];
        memset(m_pnData, 0, sizeof(int) * nSize);
    }
    
    ~CIntArray() { delete m_pnData; }
    
    //상수형 참조의 경우
    int operator[](int nIndex) const
    {
        cout << "operator[] const" << endl;
        return m_pnData[nIndex];
    }
    
    //일반 배열 연산자
    int& operator[](int nIndex)
    {
        cout << "operator[]" << endl;
        return m_pnData[nIndex];
    }
};

void UserFunc(const CIntArray &arrParam)
{
    //상수형 참조이기에, "operator[] const" 출력
    //arrParam.operator[](3) 과 같은 문장
    //arrParam은 참조이기에 const로 넘어간다
    cout << arrParam[3] << endl;
}

int main()
{
    CIntArray arr(5);
    for(int i=0; i<5; i++)
        //arr.operator[](i)와 동치 
        arr[i] = i*10;
        
    UserFunc(arr);
    return 0;
}

 

 

8. 단항 증감 연산자에서 신경써줘야 하는 부분은 전위식, 후위식이다.

해당 코드 라인에서 변수의 값에 변화를 주는 '전위식', 해당 코드 라인 이후에 변수의 값에 변화를 주는 '후위식'

이를 인지하고 단항 증감 연산자를 오버로딩 해야한다. 

'전위식' 은 int operator++() 로, '후위식'은 int operator++(int) 로 나타낸다. 

//전위 증가
int operator++()
{
    return ++m_nData;
}

//후위 증가
int operator++(int)
{
    int nData = m_nData; //Data 백업 해놓기!
    m_nData++;
    
    return nData;
}
반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

행렬 곱셈 최적화 2편  (2) 2020.07.23
행렬 곱셈 최적화 1편  (0) 2020.07.23
C++ 5단원 복습! (1편)  (0) 2020.03.22
C++ 4단원 복습! (2편)  (0) 2020.03.15
C++ 4단원 복습! (1편)  (0) 2020.03.14

댓글