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

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

소스코드

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
    

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

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.