본문 바로가기
Language/C++

C++의 개선된 문법

by W00gie 2020. 11. 10.

 

 

C언어를 기반으로 개발된 C++언어는 C의 거의 모든 기능을 포괄하며 새로 추가된 문법 도 많지만 일부 제외된 문법도 있다. 따라서 두 언어 사이에서 C++ 고유의 개선된 문법들만을 간략하게 정리해본다.

 

1. Tag 명시의 불필요

 

기존 C언어에서는 enum이나 structure를 선언할 때는 태그를 먼저 선언한 후 태그로부터 변수를 선언한다.

enum origin {EAST,WEST,SOUTH,NORTH};
enum origin mark = WEST;

struct Human
{
	int age;
    int name[5];
}
struct Human human1 = {25,"김동욱"};

 

하지만 사실상 앞에 키워드를 붙이지 않더라도 선언문을 보면 열거형인지 구조체인지 구분이 가능하다.

기존 C언어에서는 이를 분명히 하기 위해 태그를 명시한 후 변수를 선언해왔다.

 

C++에서는 enum, struct 키워드 없이 변수의 선언이 가능하며, 태그를 하나의 타입으로 인정하기 때문에 태그명으로 변수를 선언할 수 있다.

 

origin mark = WEST;
Human human1 = {25,"김동욱};

 

 

2.  new 연산자를 통한 메모리 할당

 

C언어에서는 malloc/free 함수를 통해 메모리를 동적할당, 해제 하였지만 C++에서는 함수가 아닌 연산자로 메모리를 할당 및 해제한다. (stdlib 헤더 파일을 포함할 필요가 없다)

 

new 연산자의 형식

int *ptr;
ptr = new int;  //할당

*ptr = 916
printf("*ptr = %d\n",*pi);

delete pi; //해제 
}

 

*다수의 객체를 할당할 경우 new 연산자 뒤쪽에 []괄호에 필요한 요소의 개수를 명시할 수 있다.

* new 연산자가 메모리 할당에 실패할 경우 포인터에는 NULL이 리턴된다고 한다.

NULL 포인터에 대해서 delete호출은 안전하다.

 

기존 C언어의 malloc 함수는 바이트 단위로 할당량을 지정해야해서 sizeof의 선언과 캐스트 연산자도 필요했는데

enw 연산자는 할당할 때부터 타입을 지정하므로 크기를 밝힐 필요가 없고 캐스팅도 필요없다.

 

3. 간편한 입출력 명령

 

C언어에서 printf, scanf를 통한 입출력명령을 제공했다면

C++에서는 cin, cout를 제공한다.

 

출력을 위한 cout

cout의 형식)

cout << "Hello World" << endl;

*cout의 사용을 위해선 iostream 헤더파일을 명시해야한다.

*endl 은 개행을 의미한다. (=\n)

 

입력을 위한 cin

cin의 형식)

int age;
cout << "나이를 입력하시오" ;
cin >> age;
cout << "당신의 나이는 "<< age << "살 입니다.";

* cout의 연산자(<<) 은 출력을 위해 cout로 객체를 보낸다. cout <<- 생각하면 암기하기 쉽다.