[C++] namespace, using, 입출력 구현 (cin, cout)
2024. 3. 19. 13:30ㆍProgramming Language/C++
`main.cpp`
#include <iostream>
// *네임 스페이스
namespace MYSPACE
{
int g_int; // 전역 변수
}
namespace OTHERSPACE
{
int g_int;
}
// *using
// 개별적, 세부적으로 해제
using std::cout;
using std::wcout;
using std::cin;
using std::endl;
// *endl
// endl도 함수이다.
// 이 함수가 호출되면 커서가 아래로 하나 내려갈 뿐이다.
// 이 함수는 operator >>와 operator << 함수가 받아간다.
void MyEndL()
{
wprintf(L"\n");
}
// cin, cout을 하나의 클래스에 구현했다.
class CMyOStream
{
public:
//----------- cout 구현 -----------//
// 연산자 오버로딩
// 1byte 문자열
CMyOStream& operator << (int _idata)
{
printf("%d", _idata);
return *this;
}
// 2byte 문자열
CMyOStream& operator << (const wchar_t* _pString) // 문자열의 시작 주소를 받아간다.
{
wprintf(L"%s", _pString); // %s : 문자열 출력
return *this;
}
//----------- cin 구현 -----------//
// 정수 버전
CMyOStream& operator >> (int& _idata)
// _idata는 해당 멤버 함수 내의 지역 변수이다.
// int a = 0;
// mycout >> a; // a에 입력이 되어야 한다. (ex. 100을 입력하면 a에 입력된다.)
// C의 scanf는 원본의 주소를 받아가지만 C++에서는 래퍼런스가 있다.
// 주소를 넘기지 않아도 참조를 넘기면 되고, 수정할 것이기 때문에 const는 붙이지 않는다.
{
scanf_s("%d", &_idata);
return *this;
}
//----------- endl 구현 -----------//
CMyOStream& operator << (void(*_pFunc)(void))
{
_pFunc();
return *this;
}
};
// 자료형으로 만든 것은 실체가 없을 수가 없다.
// 때문에 클래스 안에 멤버가 아무것도 없어도 그 크기는 1byte이다.
CMyOStream mycout; // mycout : 멤버 함수에 호출된 객체의 주소로, CMyOStream의 this에 해당한다.
int main()
{
//g_int = 0; // 오류 // MYSPACE 안에 선언되어있기 때문이다.
MYSPACE::g_int = 0; // 네임스페이스에 접근하려면 범위 지정자(::)를 사용해야 한다.
// 동일한 변수명(g_int)이지만 다른 공간에 있기 때문에 가능하다.
OTHERSPACE::g_int = 0;
// mycout에 그냥 한글을 넣으면 ??로 나오면서 깨진다.
// VS 지역 언어 설정을 표준으로 쓰다보니까 한글 설정이 기본으로 안 되어있을 수 있다.
// 아스키 코드 대응표를 한글 쪽으로 맞춰준다.
setlocale(LC_ALL, "korean");
_wsetlocale(LC_ALL, L"korean");
//mycout << 10 << 20 << 30;
mycout << L"한글";
mycout << 10 << L" " << 20 << L" " << L"문자열" << MyEndL;
return 0;
}
'Programming Language > C++' 카테고리의 다른 글
[C++] 문자 (0) | 2024.03.24 |
---|---|
[C++ STL] 벡터(vector), 리스트(list) (0) | 2024.03.19 |
[C++] 구조체 · 클래스 템플릿으로 리스트 구현 (0) | 2024.03.18 |
[C++] 클래스 (+ 멤버 함수, this 포인터) (0) | 2024.03.18 |
[C++] 정렬과 버블 정렬 구현, 함수 포인터 (0) | 2024.03.17 |