C++언어 공부/개념 공부

2024.01.25 C++ 언어 공부 2일 차

코딩입문시작 2024. 1. 25. 16:38

namespace (C++에만 있는 문법)

  • 프로그램에서 자주 사용하는 명칭이 있다면 using 키워드를 먼저 선언한 후 생략하는 것이 좋다.
  • namespace는 C++의 각종 요소들(변수, 함수, 클래스 등등)을 한 범주로 묶어주기 위한 문법이다.

자주 쓰는 std를 생략하기 위해 ' using namespace std; ' 를 쓰고가자!

 

구조체에도 namespace (   ) 를 통해 별명을 넣어줌으로, (   )::(함수명) 이렇게 호출이 가능하다.

 

[포인터 개념 간략하게]
포인터 → 주소

int age = 22; 라고 선언하면
RAM안에 age라는 변수 안에 22가 담긴다.

int* ptr = &age; 라고 선언하면 age변수의 주소지가 ptr에 담긴다.
※ ptr에 다른변수 num을 넣으면 주소지가 수정될 수 있다. 포인터 또한 주소를 담는 변수이기 때문이다.

 

 

new, delete (C개념으로 따지면, '동적할당 및 해제')

  • C의 malloc, free 에 대응되는 C++의 메모리 할당 연산자.
  • 프로그램 실행 중에 메모리를 할당한다는 점에서 용도가 비슷하다.

 

new

  • 포인터 = new 타입[ (초기값) ];   // 대괄호는 생략해도 된다는 의미
  • new 다음에 타입을 적으면 sizeof(타입) 만큼의 메모리가 할당되고 할당된  포인터가 리턴된다.
  • new가 리턴하는 번지는 같은 타입의 포인터 변수로 대입 받는다.
  • 할당과 동시에 초기화하고 싶으면 타입 다음 초기값을 적되, 초기화를 할 필요가 없으면 생략할 수 있다.

포인터에 대한 개념

 

delete

  • delete 포인터; 
  • new 연산자를 통해 할당된 메모리를 해제할 때는 delete 연산자를 사용한다. 
  • 만약 할당만 하고 해제를 하지 않으면 메모리 일부를 사용할 수 없게 되는 Memory Leak가 발생하므로 동적 할당한 메모리는 반드시 delete 해야한다. 

 

malloc, free 와 대비되는 장점

  • 1. malloc, free 는 라이브러리  가 제공하는 함수이지만, new, delete는 연산자이다. 
  • 2. malloc 함수는 void* 를 리턴하므로 형변환이 강제되었다. 하지만 new는 해당 타입의 포인터를 리턴한다. 
  • 3. new 연산자로 객체를 할당할 때 생성자가 자동으로 호출된다. 
       delete로 객체를 삭제할 때 소멸자(파괴자)가 자동 호출된다. (클래스할 때 다시 배울 것)

실습

 

강사님 풀이

 

돌이켜 생각해보면 단순하지만, 실습을 짤 때 이런 질문을 하였다. 

 

Q : 여러값을 동시에 입력 후 여러 값이 줄바꿈 없이 출력이 가능할까?

A : [ << endl; ] 을 빼버리면 가능하다!

 

string

  • 문자열을 다루는 클래스이다.
  • C에서는 char* 또는 char[ ]의 형태로 문자열을 다뤘다면, C++에서는 문자열을 하나의 변수 type처럼 사용하며, 문자열을 훨씬 다양하고 쉽게 다룰 수 있게 해준다.

 

 


풀어볼만한 문제

[실습]
주민등록번호를 입력받아(- 제외) 7번째 자리가 1  3이면 남자를 출력하고, 2  4이면 여자를 출력해라.
둘 다 아니라면 잘못 입력하셨습니다 출력 후 다시 한 번 입력할 수 있도록 구현

 

 

 

맨 처음에 풀었을 때는 작동이 되지 않았다. 그 이유는 string은 숫자가 아닌 문자열로 받기 때문에 1과 3을 숫자가 아닌 '1' 과 '3' 처럼 작은 따옴표를 써서 문자열임을 알려줘야 한다. 

 

실행 결과창
또 다른 실습 프로그램 예시