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

조회수 3687회

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

소스코드

class Myclass
{
public:
    void print() const {}
};

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    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
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.