Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 06-1 : const개념 보충 본문

Programming Lang/C++

C++ Chapter 06-1 : const개념 보충

시데브 2023. 7. 17. 17:12

const 객체와 const 객체의 특성들

 const는 변수를 상수화 하듯이, 객체도 상수화할 수 있다.

const int num = 10;		// 변수 상수화
const SoSimple sim(20);		// 객체 상수화

 객체를 상수화한다는 것은 객체의 데이터 변경을 허용하지 않겠다는 뜻과 같다. 때문에 상수화된 객체를 대상으로는 const 멤버함수의 호출 이외에는 할 수 있는 것이 없다. 변경시킬 능력이 있는 함수는 아예 호출이 불가능하다는 것이.

 

 예제를 통해 const 객체의 특성을 확인해보자.

#include <iostream>
using namespace std;

class SoSimple
{
private:
    int num;
public:
    SoSimple(int n) : num(n)
    { }
    SoSimple& AddNum(int n)
    {
        num += n;
        return *this;
    }
    void ShowData() const
    {
        cout<<"num: "<<num<<endl;
    }
};

int main(void)
{
    const SoSimple obj(7);
    // obj.AddNum(20); -> const 함수가 아니기 때문에 호출 불가능
    obj.ShowData(); // const 함수이기 때문에 호출 가능
    
    return 0;
}
num: 7

 위 특징을 통해서 우리는 저장된 값을 변환하지 않는 함수에는 가급적으로 const를 붙여서 const 객체에서도 호출가능하도록 만들어야 한다는 것을 알 수 있다.

 

const와 함수 오버로딩

 함수 오버로딩이 성립하려면 매개변수의 수나 자료형이 달라야 하는데, 다음과 같이 const의 선언 유무도 오버로딩의 성립 조건에 해당된다.

void SimpleFunc() { . . . . }
void SimpleFunc() const { . . . . }

 이와 관련된 예제를 확인해보자.

#include <iostream>
using namespace std;

class SoSimple
{
private:
    int num;
public:
    SoSimple(int n) : num(n)
    { }
    SoSimple& AddNum(int n)
    {
        num += n;
        return *this;
    }
    void SimpleFunc()
    {
        cout<<"SimpleFunc : "<<num<<endl;
    }
    void SimpleFunc() const
    {
        cout<<"const SimpleFunc : "<<num<<endl;
    }    
};

void YourFunc(const SoSimple &obj) // const 참조자를 인자로 받음 
{
    obj.SimpleFunc(); // obj는 const 참조자이기 때문에 const 멤버함수가 호출된다.
}

int main(void)
{
    SoSimple obj1(2);
    const SoSimple obj2(7);

    obj1.SimpleFunc();
    obj2.SimpleFunc();

    YourFunc(obj1);
    YourFunc(obj2);

    return 0;
}
SimpleFunc : 2
const SimpleFunc : 7
const SimpleFunc : 2
const SimpleFunc : 7

 


출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12