본문 바로가기
개발 지식/C++

[C++] cout cin namespace overloading 접해보기

by 에르주 2021. 10. 16.
반응형

예전에 C++ 언어에 대해 정리했던 것을 다시 복습겸 정리 해보려한다.

1. cout cin 익히기

cout은  표준 출력 객체로<<  연산자함수와 같이 사용한다.  -> like printf( C언어)

cin  은  표준 입력 객체로 >> 연산자 함수와 같이 사용한다.. -> like scanf( C언어)

 

예를 들어 코드를 한번 살펴 보자.

 

#include <iostream>                    //C언어에서 stdio.h
using namespace std;
    int main() {


        int number = 25;
        double d_number = 17.5;
        char str[20] = "Hello World";


        cout << "내가 입력한 정수는 : " << number << endl << "내가 입력한 실수는 : "<< d_number  << endl; 
        cout << str << endl;        // endl = end of line 으로 씨언어에서는 \n 과 비슷한 역할을 진행합니다.


        return 0;
    }

 

라는 코드를 입력해서 컴파일을 해보면 

 

 

 

 

 

이라는 결과가 나타나게 된다.

이 코드에서도 C++ 과 C언어와 다른 점이 보인다. 데이터 타입에 신경 쓰지 않는 것이다.

 

C언어에서 예를 들자면 

Int  형으로 변수를 설정하게 되면 printf에서 (%d) 라는 것을 통해 출력이 되는 것인데 C++ 에서는 거기에 상관없이 연속적으로 << 연산자를 사용할 수 가 있다.

 

 

 

2. namespace ?

이번에 한번 포스팅 할 내용은 namespace 이다. namespace 말 그대로 이름 공간이라는 것

 

 

 

 

하나의 그림으로 예시를 들어보자면

각각의 다른 프로그래머가 minus 라는 함수를 다른 라이브러리를 사용해서 썼다고 가정해보면 합쳐보면 충돌 할 가능성이 높다.

이를 방지하고자 namespace를 활용 한다.

 

name space를 활용하는 코드를 살펴보면

 

#include<iostream>
using namespace std;


        namespace mspark {                // namespace mspark 작성


        int chap02;
        void test() { cout << "mspark : handsome" << endl; }
        void test1() { cout << "mspark : very handsome " << endl; }
        }


        namespace mspark2 {                // name space mspark2 작성


            using namespace mspark;


            int chap02_1;
            void test() { cout << "mspark : not handsome" << endl; }


                    namespace mspark3 {


                    void test() { cout << "mspark : smart" << endl; }


                    }


            }


            int main() {


                mspark2 :: test();                    // mspark test를 불러온다.
                mspark2 :: test1();                    // mspark에 test1은 없으므로 mspark test1을 불러온다.
                mspark2 :: mspark3 :: test();        // mspark2의 mspark3의 test를 불러온다


                return 0;
            }

 

 

코드를 분석해보면 

3번째 줄코드에서 namespace 로 mspark를 만들었다.

6 ~7 번째 코드를 보시면 그 안에 test, test1 이라는 함수를 살펴보자.

 

10번째 줄을 보시면 mspark2라는 namespace를 만들었다. 그 안에서는 mspark와 같은 함수 명인 test 함수를 만들었다.

그리고 mspark2 안에 또다른 namespace mspark3를 만들었다.

 

그림으로 나타내자면

각각의 namespace

 

 

 

 이런 식으로 나타낼 수 있다.

 

 main() 객체에서 

 mspark2 :: test(); 라고 되어있다. 여기서 mspark :: 라는 식은 namespace mspark를 사용한다는 뜻이다.

 msapark2 :: test1() 를 보면 mspark2라는 namespace 안에  test1 의 함수가 없다.

그러므로 namespace mspark에 있는 test1  함수를 불러오는 것이다.

 

저 코드를 컴파일 해보면

 

 

 

 

 

라는 결과를 나오게 된다.

 

끝.

반응형

'개발 지식 > C++' 카테고리의 다른 글

[C++] char*, char[], string 변수의 차이  (1) 2020.09.15

댓글