[C++] 1. iostream, inline, namespace

2011. 5. 19. 22:48C++

[C++] 기초 1

1. iostream
 표준 입력과 출력에 관련된 api가 존재한다.
 <iostream.h> : 이전 표준
 <iostream> :신규 표준(이전과 구분하기 위하여 .h를 빼고 있다.

2. cout and cin
 cout<<"문자열 출력";
 cin>>입력변수1>>입력변수2>>입력변수3; // 키보드 입력

3. 오버로딩
 C : 함수 이름만 가지고 검색하기 때문에 지원을 안한다.
 C++ : 이름 뿐만 아니라 매개변수도 확인하기 때문에 지원한다.

4. 디폴트 매개변수
 매개변수의 값에 설정한 기본값을 설정한다.
 헤더파일이나 CPP 함수중 딱 한곳에만 지정한다.

 예> 헤더파일에: int Volume(int x, int y=3, int z=5) 를 해야 한다. (반드시 헤더파일 임)
     int Volume(int x, int y, int z) {
         return x*y*z;
     }

     호출 : Volume(3);
            Volume(3,4);
            Volume(3,4,5);


     * 참고: 만약 Volume(int x,int y)같은 경우도 선언가능하지만 혼돈이 생길수 있으니 매개변수나 오버로딩중 하나

를 선택하도록 한다.

5. 인-라인 함수
 프로그램 소스코드 안으로 함수의 정의가 들어간다는 것입니다.
 (매크로 함수)
 해당 매크로의 소스코드가 호출 부분과 치환되어 컴파일 된다.
 장점: 실행속도의 향상이 있으나, 구현이 어렵다. 함수콜 자체가 축소가 되니 빠르겠죠.

 - C 스타일
 이런 형태는 해당 매크로함수에 문제가 있어도 발견되지가 않는다.(왜? 컴파일 되지 않기때문)
 #define SQUARE(x) ((x)*(x))  

 사용 => std::cout<<SQUARE(5)<<std::endl;

 

 - C++ 스타일
   컴파일러에 의해 최적화 되어 처리된다. 매크로 함수의 장점을 그대로 반영하면서 구현도 용이하다.

   inline int SQUARE(int x){
        return x*x;
   }
   사용=> std::cout<<SQUARE(5)<<std::endl;
  
6. 이름공간(namespace)
   서로다른 작업공간내에 같은 이름들이 존재할경우 이에대한 충돌을 방지하기 위해 생성되었다.
   비주얼 스튜디오의 .h 와 cpp 구조하(클래스 명이 정해진 상태에서의) 에서는 아래와 같이 하나의 cpp안에 네임스페이스를 정의 할 수 없다.

   namespace A_COM{
 void function(void) {
    std::cout<<"A 회사의 함수"<<std::endl;
 }
   }

   namespace B_COM{
 void function(void) {
    std::cout<<"B 회사의 함수"<<std::endl;
 }
   }

   이렇게 공간을 나눌경우 충돌이 되지 않습니다.
   (범위지정 연산자를 이용해 호출한다.)
   호출 => A_COM::function();
           B_COM::function();

   예> std , 이게 곧 namespace 입니다.

   - using 선언
     using A_COM::function;   => 이 함수를 function으로 그냥 사용하겠다는 의미다.
     using namespace A_COM;   => A_COM에 존재하는 모든것을 그냥 사용한다.