2014-04-22 6 views
4

간단한 질문입니다. 정적 멤버 함수, 즉 객체에 액세스하지 않고 호출 할 수있는 함수 (단순히 클래스 식별자를 사용함)와 비 멤버 함수의 차이점은 무엇입니까? 여기에서는 개념적으로나 기능적으로 묻습니다.C++ : 비 멤버 함수와 정적 멤버 함수의 차이점은 무엇입니까?

비 멤버 함수는 개념적으로 정적입니까?

+0

다른 질문 인 http://stackoverflow.com/questions/7657051/difference-between-static-method-and-non-static-function-in-memory – 101010

+0

@ 40two를보십시오. 그래도 감사합니다. – Thomas

+1

질문은 아주 잘 정리되어있는 답변이 아닙니다. 저의 겸손한 견해로는 대답이 여러분의 질문을 고려한 통찰력을 제공합니다 (예 : "비 정적 함수는 추가 매개 변수를 허용합니다."this는 인스턴스 고유 변수를 가진 클래스 인스턴스에 대한 포인터입니다. (정적 함수에서'this '를 사용할 수없고 정적 데이터 멤버에만 액세스 할 수 있습니다.) – 101010

답변

6

정적 멤버 함수는 클래스의 개인 및 보호 섹션에 액세스 할 수 있습니다. 비 멤버 함수는 기본적으로 그렇게 할 수 없습니다. 클래스가 우정을 부여하는 경우에만 가능합니다.

또 다른 포인트는 정적 멤버 함수의 이름이 클래스의 범위에 있다는 것입니다. 여러 클래스는 이름 충돌에 대한 걱정없이 같은 이름의 정적 멤버 함수를 가질 수 있습니다.

+0

감사합니다! 귀하의 답변은 내 교과서 (Deitel)보다 훨씬 명확합니다 - 그리고 그 이상으로 선생님 (그리고 질문에 대한 연구)보다, 특히 우정과 회원의 시야를 부여하는 것과 관련하여. – Thomas

1
내가 클래스의 정적 기능하지 않을 수 있습니다 연산자를 오버로드 @R Sahu의 대답을 추가하고 싶은

. :)

또한 정적 함수 자체 보호 및 개인 할 수 있습니다. 그래서 그들은 그들이 선언 된 클래스 또는 그 파생 된 클래스 외부에서 작동하지 않을 수 있습니다.

0

정적 멤버 함수의 또 다른 이점은 Windows API의 스레드에서 호출하려는 경우 유일한 방법이라는 것입니다. CreateThread는 전역 공간에있는 함수를 필요로합니다. 멤버 함수이면 정적이어야합니다. 적어도 내 지식에 있어서는 그 주위에는 방법이 없습니다.