프로그래밍 공부
작성일
2023. 4. 5. 15:57
작성자
WDmil
728x90

c++에서는 iostream을 사용한다. 이것은 input_output_stream 이라는 입력과 출력의 함수를 사용하겠다. 라는 뜻 이다.

C++에서는 C에서 사용하는.h같은 식으로 붙이지 않고, c에만 있는 함수를 사용하고 싶다면, c를 붙이고 사용하던 함수를 호출하면 된다.

 

예시를 보자.+

 

출력문은 다음과 같다.

이는 출력문을 cout에 일정 문자열을 흘려보낸다 라는 뜻 이다.

위와 같이 사용할 수 있다.


변수를 선언하고 해당 변수를 출력할 수 도있다.


std::cout로 데이터를 입출력 할 수 있다.

이것은 C++에서의 다양한 방법으로 입출력이 조정 가능하다.

위와 같이. 다양한 방법으로 입출력 변수를 조정할 수 있다.

true로 나타낼 수 있고, false로 출력할 수 있고, 이것을 키고 끄면서 원할때 다양한 변수를 출력하는걸 더 많은 코드를 귀찮게 더 넣지 않고도 가능하다.

 

데이터의 변수를 진수형태로 출력하는것또한 같은 방법으로 가능하다.

 

단, printf와 같은 방법으로 데이터를 출력하는 것이 아님으로, %d와 같은 형변환을 이루어주지 않아도 데이터의 형을 직접 확인하여 출력해 준다.


변수를 초기화 하는방법또한 c언어와 C++은 다르다, 다음 예시를 살펴보자.

 C++은 변수를 초기화 하는 방법이 3가지 존재한다.

x에 10을 복사해서 넣는 6번째줄의 copy initalization

y에 10을 직접넣어주는 7번째 줄의 direct initialization

z에 10을 배열의 1칸처럼 넣어주는 uniform initialization

의 3가지 방법이 있다.

 

각각의 변수 초기화 방법은 6줄은 c의 방법, 나머지는 C++에서 추가된 방법이다. 그중 direct 초기화가 가장 빠르다.

안정성이 가장 높은건 uniform이 가장 높다.


변수를 c와 같이 int형에 float형을 넣어서 데이터 초기화를 하면

일정의 넣을 수 없는 데이터가 잘리는 현상이 나타나는데, 이것을 C++방식대로 넣을경우  error가 나타나게 된다. 다음 예시를 살펴보자.

위와 같이 error 가 나타나는것을 볼 수 있다.

C++에서는 데이터를 변환할 수 없을경우 err가 나타난다.

C++로 와서 새로 생긴 데이터입력 방식으로는 값을 벗어나는 입력을 넣을 수 없다.


데이터의 형에 따른 최소값과 최대값을 numeric_limits를 통해 출력 할 수 있다.

numeric_limits<형> 형을 통해 데이터타입을 입력하여 데이터타입의 max와 min을 출력할 수 있다. 

20번줄을 해석하면 다음과 같다.

std의 cout를 호출, 그 내부의 std에 numeric_limits를 가져와 short를 입력, 그 안의 max를 출력. 그후 std의 endl를 호출


C언어와 마찬가지로 데이터의 형 변환을 할 수 있다. 방법은 다음과 같다.

각각 형변환의 방법은 3가지가 있다.

우선 첫번째 는 해당된 데이터를 그냥 출력하는것,

 

34번째 줄은 C언어의 방식대로 강제적인 형변환을 시도한다. 어떠한경우에도 형변환을 해주기 때문에 가장 힘이 강하다. 그러나, 오류가 나올 가능성이 있다.

 

35번째 줄은 C++방식대로의 스타일이다. 34번째와 다르게 k를 괄호로 감싸는 걸 볼 수 있다. k를 int형으로 넣는다고 보면 된다. 동작방식은 같으나, C++형태의 스타일이다.

 

36번째 줄은 C++방식이나, 더 안정적인 방법이다. 35번째와 다르게 static_cast<>를 사용하는것 을 볼 수 있는데, 이것은 형변환이 가능할 경우 에만 형변환을 시도해준다. 그리하여 오류가 날 가능성이 더 적어지는 효과가 있다.

 


C언어의 const는 연산자를 상수로 처리해주는 것이다.

변수를 변환하지 못하는 상수로 바꿔주는 효과가 있는데, 이것은 Define과 같은 효과를 가진다. 그러나 Define과는 다르게 런타임 시 값이 정해지는 차이가 있다.

 

C++에서는 constexpr이라는 방법을 사용할 수 있다. 다음 예시를 보자.

원래 배열선언시 런타임 때 선언되는 상수로는 사용할 수 없음을 볼 수 있다. 그렇기 때문에 정해진 데이터값으로 변수를 넣어주어야 하나, constexpr을 사용할 경우 컴파일 시 데이터가 정해지기 때문에 순서상 배열값에 넣을 수 있다.

그럼으로 일반적인 배열값을 더 효율적으로 넣어줄 수 있다.


Namespace라는 것 이 있다.

이것은 펑션을 따로 정의해주는 함수처럼 어떠한 변수들이나 함수를 이름공간으로 정의해서 하나의 그룹으로 묶어주는것을 이야기한다. 

 

이러한 Namespace방법은 여러명이 다양한 코드를 작성하여 하나로 합칠 때 동일한 변수를 사용하였을 경우, 모호성 문제가 생기는것을 방지해주는 역활을 한다.

즉, 변수이름이 겹쳐서 코드에 에러가 나는 경우가 있는데. 그것을 사전에 차단해준다.

다음 예시를 살펴보자.

위와 같은 방식으로 namespace를 정의하여 변수를 정의해줄 수 있음을 볼 수 있다. 다음 함수를 호출하거나 변수를 호출하기 위해서는 밑과 같은 방식을 따른다.

다음과 같은 namespace방법을 사용하여 변수를 출력해줄 수 있다.

 

62번째 줄의 경우 A에 접속하여 exFunc를 출력한다는 말이다.

63번째 줄의 경우 B에 접속하여 exFunc를 출력한다는 말이다.

 

65번째 줄을 해석하면, myNamespace1을 호출, 그 안의 AA를 호출하고 그 안의 BB를, CC를, 그 안의 c를 호출한다는 의미이다.

 

그럼으로 다음 Namespace를 호출하면 c를 다룰 수 있다.

 

myNamespace2::a = 20;을 호출하여 a를 20으로 바꿔줄 수도 있다.


만약 std를 호출하지 않고도 더 빠르게 코드를 호출하기 위해서는 다음과 같은 방법을 사용할 수 있다.

using std::cin을 넣으면 cin을 사용할때, cout을 넣으면 cout를 사용할때, endl를 넣을때 등 std를 다시 선언하지 않아도 된다.

이는 해석하면, cin을 사용할때, cout를 사용할 때, endl를 사용할 때 str에 있는걸 무조건 사용하겠다. 라는 말이다.

 

80번째 줄을 보면, using namespace std를 볼 수 있는데, 이것은 std라는 namespace에 있는 모든 함수, 변수가 선언되었을 경우 무조건 std에 있는것을 사용한 것 처럼 취급한다는 의미 이다.

 

그리하여 , 위 코드를 선언하면 87번처럼 작성하여도 출력이 가능하다.


그러나, 변수명이 그 내부 main에 선언되었을 경우 또는 전역변수가 같은 변수명 일 경우, 같은 변수가 std와 main문에 있을경우 변수는 무조건 main문에 있는 변수가 우선되어 작성된다. 그럼으로 해당 변수에 1을 더하면 1이 더해져서 출력됨을 볼 수 있다.


만약 전역 변수에 더하고 싶다면, 90번째줄 처럼 작성해주면 된다.

그러면 전역변수에 접근하고 출력해줄 수 있다.

728x90