2011-05-05 4 views
1

https://cs.senecac.on.ca/~chris.szalwinski/archives/btp200.081/content/overl.html 주소에서 일부 C++ 텍스트를 읽습니다. 첫번째 라인 , 그들이 말 :C++에서 오버로드 된 멤버 함수에 대한 질문이 있으십니까?

멤버 함수의 서명이 구성

  • 함수 이름,

  • 매개 변수의 데이터 타입을

  • 매개 변수 순서 및
    가능

  • 함수의 const 상태입니다.

나는 그들이 "기능의 CONST 상태"말 무슨 뜻인지 이해가 안 돼요.

누구든지 자세히 설명해 주실 수 있습니까? 감사합니다. .

답변

4

C++에서는 해당 키워드를 해당 서명 (예 : int MyClass:doSomething(int param) const {...})에 추가하여 클래스의 멤버 함수를 const으로 선언 할 수 있습니다. 이렇게하면 함수가 호출되는 클래스 객체의 (mutable) 멤버를 변경하지 않으므로 해당 클래스의 const 인스턴스로 호출 할 수 있습니다.

const 선언 여부에만 다른 서명이있는 클래스에는 두 가지 멤버 함수가있을 수 있습니다.

+0

"(** non ** - 변경 가능)"을 변경하지 않습니까? "변하기 쉬운"것을 의미 했습니까? – davka

+0

@ davka - 아니요.클래스 멤버를'mutable'으로 선언 할 수 있습니다 ('mutable int m_foo;'에서와 같이). 이것은 const 함수로 변경 될 수 있음을 의미합니다. – Chowlett

+0

알아요. 이제 나는 당신이 "변치 않는"것이 아니라 "변할 수없는"것을 의미하는 것을 보았습니다. 텍스트의 배경색을 기반으로한다면 정확한 의미를 얻는 것은 매우 어렵습니다. – davka

3

동일한 클래스 범위에 넣으려면 기능이 다른 항목을 요약해야합니다. 끝에 const은 다음과 같습니다

struct A { 
    void f(); 
    void f() const; 
}; 

이 유효 과부하입니다. 당신이 Af를 호출하는 경우 첫 번째라고하며, 당신이 const A에를 호출하는 경우 두 번째는 사용됩니다 용어 "서명"여기 오용되는 것을

A a; 
a.f(); // takes first 

A const& b = a; 
b.f(); // takes second 

참고. 함수의 서명은보다 광범위하며 함수가 속한 클래스도 포함됩니다. 서명은 기능을 고유하게 식별합니다.

0

구성원 함수를 const으로 선언하면 멤버 함수가 개체의 데이터를 수정하지 않고 const가 아닌 다른 멤버 함수를 호출하지 않는다고 컴파일러에 알립니다.

컴파일러는 실제로 데이터를 수정하지 않았는지 확인합니다. const 또는 non-const 오브젝트에 대해 const 멤버 함수를 호출 할 수 있지만 const 오브젝트에 대해 const가 아닌 멤버 함수를 호출 할 수는 없습니다 (오브젝트를 수정할 수 있기 때문에).

constness에 대한 자세한 내용은 C++ here에서 읽을 수 있습니다.

관련 문제