C++

모던 C++ 프로그래밍 입문 1-1

Hello 응용 프로그램

Posted by Gihoon on April 23, 2024

Hello 응용 프로그램 실습

Step 01

  • 비주얼 스튜디오 2022 버전 설치
1
2
3
4
5
6
7
8
9
10
11
//============
//실습 과제
#include <iostream>
using namespace std;

int main()
{
	cout << "hello world!\n";
	
	return 0;
}
  • ’//’ 주석문
  • 콘솔 입출력은 위해 필요한 라이브러리 “ isostream “
  • ’#’ 문자를 사용해서 전처리 단게를 가짐.
  • cout, cin, std 같은 이름들은 std 라는 이름공간에 존재한다. 따라서 std 이름 공간에 존재하는 이름들을 프로그램에서 존재하려면 using namespace 문장으로 std 이름공간의 사용을 선언한다.
  • 프로그램이 실행되면 main 함수가 제일 먼저 호출된다

필수 문법

이름 공간

  • 프로그램 전체의 이름 공간 : 전역 공간
  • c++에서는 std이름 공간의 cout을 std::cout로 표기함
  • ’::’은 범위 지정 연산자로서 번호공간의 ‘-‘와 같다고 생각하면 됨
  • 실습 과제에서 사용한 헤더 파일에 정의된 cout, cin 등의 이름은 std 이름 공간에 존재함.
  • 실습 과제에서 using name space std; 라는 문장으로 std 이름 공간에 존재하는 모든 이름을 사용하겠다고 선언함, 이는 프로그램의 전역공간과 std 이름 공간을 합치겠다는 선언과 같음.
  • 따라서 std 이름 공간에 존재하는 수많은 이름을 전역공간에서 사용할 수 없게 됨
1
2
3
4
5
6
7
8
실습 1  
#include <iostream>

int main() 
{
    std::cput << "hello world << std::endl;
    return 0;
}
  • std::cout는 std 이름공간의 cout을 지정하며, std 이름 공간에서 cout 이라는 이름만 사용하겠다는 의미가 됨.
  • 그러나 이름을 사용할 때마다 범위 지정 연산자로 이름 공간을 지정해야하느 번거로움이 따름.
1
2
3
4
5
6
7
8
9
10
실습 2  
#include <iostream>
using std::cout;
using std::endl;

int manin()
{
  cout << "hello world"" << endl;
  return 0;
}
  • std 이름 공간에서 cout과 endl 이름의 사용을 이름 공간의 using 키워드로 선언하면 cout 과 endl을 범위 지정 연산자 없이 사용할 수 있음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//============
//실습 3
#include <iostream>

namespace A
{
	void y(void)
	{
		std::cout << "A 모듈의 Y함수" << std::endl;
	}
}

namespace B
{
	void y(void)
	{
		std::cout << "B 모듈의 Y함수" << std::endl;
	}
}
//각각 A,B라는 이름 공간을 정의한다.이름 공간내의 Y라는 같은 이름의 함수를 정의한다. 함수명이 같아도
함수가 속한 이름 공간이 다름으로 이름 충돌이 생기지 않는다. 

int foo(int x)
{
	return x;
}
// FOO 라는 전역함수를 정의한다. foo 같이 특정 이름 공간 내에 정의하지 않은 변수명, 함수명은 모두 전역 공간에 존재한다.
전역 변수명, 함수명 등을 다른 이름 곤간의 이름과 구분하려면 아래처럼 함수명 왼쪽에 이름 공간을 지정하지 않고 범위 지정 연산자만 사용하거나 다른 이름 공간의 이름과 구분이 필요하지 않으면 범위 지정 없이 사용해도 된다.

int main()
{
	int result = ::foo(8); // int result = foo(8)
	std::cout << result << std::endl;
	A::y();
	B::y();

	return 0;

}

중첩 이름 공간

  • 이름 공간내에 다른 이름 공간을 설정할 수 있는데 이러한 기능을 중첩 이름 공간이라고 한다.
1
2
3
4
5
6
7
8
9
10
namespace NameSpace1
{
  namespace NameSpace2
  {
    namespace NameSpace3
    {
      //some code
    }
  }
}

범위 지정 연산자 :: 를 연속으로 사용해서 위 코드를 다음 처럼 간결하게 나타낼 수도 있음.

1
2
3
4
namespace NameSpace1::NameSpace2::NameSpace3
{
  //some code
}