-

Ch_2 C++ 함수와 네임스페이스 본문

CS Language Note/C++ 정리

Ch_2 C++ 함수와 네임스페이스

Boogallee 2018. 1. 17. 15:54


2.1 디폴트 매개변수

- c++에서는 절대로 호출자의 코드만 보고 함수 원형을 확정해서는 안된다.

- 피호출자 함수 매겨번수의 디폴트 값은 반드시 오른쪽 매개변수부터 기술해야 한다.

- 디폴트 매겨변수는 모호성을 야기할 수 있으므로, 가급적이면 자제하는 것이 좋다.

  (단, 미래 유지보수를 위해서는 필요할 수 있다)


2.2 함수 다중 정의

- C에서는 이름이 같은 함수가 존재할 수 없다. C++ 에서는 Overloading 을 통해 함수의 "다형성"을 지원한다.

- 함수를 다중 정의하는 이유는 사용자의 편의성과 확장성 때문.

- 같은 일을 하는 코드가 다중 정의된 함수가 여러개 존재하면 유지보수 측면에서 매우 비효율적, 따라서 C++ 에서는 가급적 함수 템플릿을 권장함.


template <typename T>

반환형식 함수이름(매개변수)   // 반환형식과 매개변수는 알아서 지정해준다.

{ }


2.3 인라인 함수

- 함수와 매크로의 장점만 합쳐놓은 함수라고 할 수 있다.

- 매크로는 메모리 효율이 좋지만 매개변수에 형식을 지정할 수 없는 단점이 있다.

- C++(Visual Studio)에서는 보통 인라인 함수 확장이 기본값으로 지정되어 적당한 크기의 함수 또한 인라인 함수로 확장된다.


2.4 네임스페이스

- C++가 지원하는 각종 요소들(변수,함수,클래스 등)을 한 범주로 묶어주기 위한 문법.

- 자주 사용해야하는 네임스페이스는 using 키워드 사용하여 네임스페이스 생략 가능.

- 네임스페이스 중첩/다중정의 가능

- C++에서는 네임스페이스에 속하지 않은 식별자는 없다. 적어도 전역 네임스페이스에 속한다. 따라서 C에서 사용되는 모든 함수는 C++에서 전역네임스페이스에 속하게 된다.



2.5 식별자 검색 순서 ( 식별자가 선언된 위치를 검색하는 순서 )


* 전역 함수인 경우

1. 현재 블록 범위

2. 현재 블록을 포함하고 있는 상위 블록 범위

3. 가장 최근에 선언된 전역 변수나 함수 ( 선언 순서를 고려: int data = 10; 등과 같은 코드의 위치가 실행되는 시점에서 앞/뒤 인지 잘 판단해야함)

4. using 선언된 네임스페이스 혹은 전역 네임스페이스.(두곳에 동일한 식별자가 존재할 경우 컴파일 에러)


* 클래스 메서드인 경우

1~2 는 동일

3. 클래스의 멤버

4. 부모 클래스의 멤버

5. 가장 최근에 선언된 전역 변수나 함수




 


<이것이 C++이다/최성호> 참고.

'CS Language Note > C++ 정리' 카테고리의 다른 글

Ch_3 클래스  (0) 2018.01.17
Comments