2010-07-05 7 views

답변

5

클래스의 정적 멤버 함수는 일반 (비 멤버) 함수입니다. 평범한 기능이 무엇인지 알지? 정적 멤버 함수는 동일한 이유로 좋은 결과를 얻을 수 있습니다.

때로는 일반 함수가 클래스와 긴밀한 관계를 가지기 때문에 완전히 독립적 인 독립형 함수로 선언하는 대신 클래스의 정적 멤버로 선언하는 것이 좋습니다. 함수가 클래스와의 긴밀한 관계를 가지고 있음을 표현하는 데 도움이됩니다. 게다가,이 기능을 통해 클래스의 내부 - 개인 및 보호 된 구성원 -에게 전체 액세스 권한을 부여합니다.

실제로 후자는 정적 멤버 함수를 사용하여 유용한 프로그래밍 숙어 및 패턴을 구현할 수있게합니다. 예를 들어 "정적 생성자"관용어에 대한 검색을 수행하십시오.

+0

그러나 정적 함수는 개인 및 보호 된 멤버에 액세스하지 못합니다. 그렇습니까? 클래스의 다른 정적 데이터에만 액세스 할 수 있습니까? 내가 맞습니까? – bodacydo

+1

@bodacydo : 정확하지 않습니다. 정적 함수는/if is가 해당 유리의 인스턴스에 대한 포인터를 제공받을 때 클래스의 개인 및 보호 된 멤버에 액세스 할 수 있습니다. 정적 함수가 가지고 있지 않은 것은 암시적인'this' 매개 변수입니다. 따라서 액세스 할 클래스의 인스턴스가 필요하면 함수에 명시 적으로 전달해야합니다. – AnT

+0

아니, 당신이 옳지 않습니다. 정적 메소드's()'와 private 멤버'p'를 가진 클래스'A'가 있다면, 전달 된 인스턴스는's()'가'p'에 접근하는 것을 허용합니다. 또는's()'는'A'를 인스턴스화하고'p'를 채울 수 있습니다. 그런 종류의 물건. –

0

정적 클래스는 네임 스페이스와 비슷하지만 보호 기능 (보호 및 개인)을 제공하며 템플릿으로 변환 할 수 있습니다 (예, 베어 기능도 가능하지만 때로는 래핑 클래스 템플릿을 더 쉽거나 필요하게 만드는 제한 사항이 있습니다.).

0

"글로벌"이라고 생각하십시오. 정적 인 함수는 클래스의 모든 객체에 의해 공유되는 반면, 배우는 것처럼 정적 인 함수는 하나의 객체에서만 작동합니다. 그래서 모든 객체는 공통점이 있습니까?

클래스에 따라 다르지만 "요약 정보"에 대해 생각해보십시오. 데이터에 대해 생각해보십시오. 모든 반원들에게 공통된 것이 무엇인지 생각해보십시오. 어쩌면 각각은 자체적으로 특정한 누적 합계를 가지고있을 것입니다. 그러나 글로벌 합계를 원하십니까? 그 선을 따라 생각해보십시오 ...

0

정적 멤버 함수는 정적 인 상수 데이터 멤버에서 중요하지 않은 초기화를 수행하는 데 사용할 수 있습니다. 예를 들어, 당신은 어떤 클래스에서 사용하는 정적 인 상수 컨테이너를 가질 수 있습니다. 정적 멤버 함수를 사용하여 정적 인 상수 데이터 멤버에 반환되고 복사 된 컨테이너의 인스턴스를 만들 수 있습니다.

관련 문제