메소드 정의 맨 뒤에 붙는 const는 왜 쓰나요?


이거 왜 쓰는 거에요? 헷갈려요

소스코드

class Myclass
{
public:
    void print() const {}
};
  • 2016년 01월 06일에 작성됨

조회수 242


1 답변


좋아요
0
싫어요
채택취소하기

method 뒤에 const키워드를 붙이면

1. 이 메소드 안에서는 어떤 변수도 바꿀 수 없음(mutable은 예외)

class MyClass
{
private:
    int counter;
public:
    void Foo(){
        counter=0;
        std::cout << "Foo" << std::endl;
    }
    void Foo() const{
        //counter = 1; //const함수에서는 값을 변경할 수 없으므로 error
        std::cout << "Foo const" << std::endl;
    }

};

int main()
{
    MyClass cc;
    const MyClass& ccc = cc;
    cc.Foo();
    ccc.Foo();
}

결과는

Foo
Foo const

2. const 메소드 안에서는 const가 아닌 메소드는 부를 수 없음

class MyClass
{
public:
    void Foo(){
        std::cout << "Foo" << std::endl;
        callByFoo();
    }

    void Foo() const{
        std::cout << "Foo const" << std::endl;
        callByFoo(); //const함수에서는 const가 아닌 메소드는 부를 수 없음. error
    }

    void callByFoo(){
        std::cout << "callByFoo" << std::endl;
    }
    void callByFoo() const
    {
        std::cout << "callByFoo const" << std::endl;
    }

};

int main()
{
    MyClass cc;
    const MyClass& ccc = cc;
    cc.Foo();
    ccc.Foo();

}

결과는

Foo
callByFoo
Foo const
callByFoo const
  • 2016년 06월 01일에 수정됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.
  • 2016년 01월 06일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close