2010-06-04 2 views
4

C++에서는 어떤 클래스에도 속하지 않는 '글로벌 함수'를 가질 수 있습니다. OOP의 기본 원칙을 위반하는 것이 아닌지 궁금합니다.C++ 전역 함수 및 OOP?

클래스에서 정적 인 전역 함수 또는 함수를 사용하면 어떤 차이가 있습니까? 나는 후자가 더 OOP 지향적이라고 생각하고 있습니다. 그러나 나는 틀릴 수도 있습니다 ...

멀티 스레드 응용 프로그램을 작성할 때 더 어렵지 않습니까?

+0

글로벌 기능이 멀티 스레딩과 관련이있는 이유는 무엇입니까? –

+0

...OOP로 모든 것을 해결하려고 시도하면 TMTOWTDI 원칙을 위반합니다 ;-) – fredoverflow

답변

8

클래스 내부의 정적 함수는 모듈 내부의 전역 함수로 나타납니다. 것은 JAVA에서, 당신은 선택의 여지가 없다.

C++에서는 전역 함수를 네임 스페이스 내에 캡슐화 할 수 있지만 더미 클래스는 필요하지 않습니다. 이렇게하면 모듈성이 생깁니다.

물론 전역 함수가있는 방식으로 네임 스페이스 외부에 함수를 넣을 수 있습니다. 하지만 정적 함수가 많은 자바 싱크대와 크게 다르지 않습니다. 또한 나쁜 코드이지만 작은 프로젝트에서는 괜찮을 것입니다.

또한 C++에서는 연산자 함수로 실제로 클래스에 링크 된 "전역"함수를 선택할 수 있습니다. 한 클래스의 인스턴스 친구.

편집 멀티 스레딩의 경우 함수가 아니라 전역 변수에 대해 걱정해야합니다.

+0

+1은'namespace' 옵션을 언급합니다. – xtofl

2

C++은 많은 프로그래밍 패러다임 (구조화, OOP, 기능)을 용이하게합니다.

소형 (hello world-style) 프로그램의 OO 접근 방식을 선택하는 것은 의미가 없습니다.

모듈 식 프로그램에 구조화 된 방법을 사용하는 것은 의미가 없습니다.

다음으로 정적 클래스 함수는 '자유'함수보다 훨씬 잘 구성되어 있습니다. 그것의 꼭대기에, 그들은 더 나은 캡슐화라는 객체의 사적인 변수에 접근 할 수 있습니다.

+0

동의합니다. C++은 최상의 선택을 자유롭게 제공합니다. 우선 프로그래밍 언어는 가능한 한 효율적으로 문제를 해결하는 데 도움이되어야한다고 생각합니다. – pcent

1

정적 메서드는 해당 클래스의 private static 필드에 액세스 할 수 있지만 전역 함수와 유일한 차이점입니다.

C++은 대략 C의 상위 집합이고 C에는 전역 함수가 있기 때문에 전역 함수가 있습니다. C는 OOP 프로그래밍과 비 OOP 프로그래밍 모두에 사용할 수 있습니다.

std::Math::max 또는 std::max을 입력해도 솔직히 차이가 있습니까?

1

다른 답변과 완전히 일치하고 나의 조언을 추가하고 싶습니다. 정적 함수와 정적 메서드는 거의 동일한 것들이며이를 악용하면 잘못된 디자인이 될 수 있습니다. 유지하려는 경우 개체 모델은 정적 함수/방법 경우에만 사용해야 청소 :

가 객체의 상태에 따라 결과를 생성하지 않는
  • 그들은 개체
의 상태를 변경하지 마십시오
+0

+1 : 좋은 조언 – neuro

+0

당신이 찾고있는 단어는 stateless입니다;) –