C++

cout,GlobalClass

Nin 2020. 12. 16. 14:24

우리가 새 프로젝트를 콘솔 앱으로 만들면 

int main
{
   std::cout << "Hello World!\n";
}

이런 코드가 자동으로 만들어져 있으며 실행하면 콘솔 창에 Hello World라는

문구가 나온다.코드를 풀어보면 std안에 있는 cout을 실행한 것이다.

저렇게 코드를 만들어 본다면 

#include<iostream>

namespace std
{
   class MyCout
   {
   public:
      void operator<<(const char* _Text)
      {
         print_s(_Text);
      }
   };   
}

이와 같이 만들수 있다.

이거를 사용하려면

int main()
{
   std::MyCout CoutTest;
   CoutTest <<"Hello World!\n";
}

이렇게 하면 같은 화면이 나올것이다.그치만

이 코드에서 보이듯이 멤버함수를 사용하려면 그 객체가 있어야한다.

그럼 cout은 왜 객체를 만들지도 않았는데 std::cout 이렇게 호출이 되는걸까?

객체는 변수라고 볼 수 있다. 지역구분에 의한 변수 종류에는

전역 변수, 멤버 변수, 지역 변수 이렇게 볼 수 있고

cout은 전역 변수라고 볼 수 있는 것이다.

namespace std
{
   class MyCout
   {
   public:
      void operator<<(const char* _Text)
      {
         print_s(_Text);
      }
   };
   MyCout MyCoutTest;
}

위와 같이 std에서 전역으로 선언으로 해주면

main에서 MyCout을 만들 필요가 없어지기 때문에

int main()
{
   std::MyCoutTest<<"Hello World!\n";
}

이렇게 사용이 가능해지는 것이고 cout 역시 이와 같은 원리이다.

 

'C++' 카테고리의 다른 글

DefaultConstructer(기본 생성자)  (0) 2020.12.18
복습) 임시 변수,레퍼런스(reference)  (0) 2020.12.17
namespace  (0) 2020.12.16
UserTypeOperator  (0) 2020.12.15
UserTypeHeap  (0) 2020.12.15