안녕하세요? 고슴도치입니다.

어묵이 자게에 올린 글을 보고 예전에 질답란에 썼던 글이 생각나서 여기에 옮겨적습니다.. 그땐 답글에 달아놔서 검색도 안될거 같아서요^^;

C++은 C언어를 100% 호환합니다. 그 외에 객체지향적 요소가 추가되었으며, C에서는 조금 불편했던 세세한 것들이 수정되었습니다.. 몇가지를 소개하면 다음과 같습니다..

1. 변수의 선언위치가 자유로워졌다.
- C는 변수의 선언위치가 함수의 시작부분으로 고정되어 있었지만, C++은 어느 위치든지 사용하기 전에만 선언해주면 됩니다.

2. 헤더파일의 포함위치가 자유로워졌다.
- 변수선언과 마찬가지로 C는 #include 명령을 파일의 첫부분에만 가능했지만, C++은 중간중간 필요한 위치에 가능합니다.

3. 한줄전용주석이 가능하다.
- C에서는 주석용 키워드가 /* ... */ 밖에 없지만, C++에서는 //라는 한줄만 가능한 주석용 키워드가 추가되었습니다.

4. 함수의 오버로딩이 가능하다.
- C에서는 동일한 이름의 다른 형태로 함수를 선언할 수 없습니다. 하지만 C++에는 오버로딩이라는 개념이 존재해서 가능해졌죠.. 다음과 같은 것입니다.

만약에 덧셈을 하는 함수를 만든다고 합시다. 그런데 덧셈은 정수+정수, 실수+실수, 정수+실수 등 다양한 형태가 존재할 수 있습니다. 이를 C에서 만드려면,

[code] int   sum1(int   a, int   b); float sum2(float a, float b); float sum3(int   a, float b); float sum4(float a, int   b); [/code]
이렇게 함수명을 각기 다르게 써줘야합니다. 그럼 프로그래밍할때 변수의 타입을 보고 알아서 골라서 써야하죠.. 하지만 C++에서는,

[code] int   sum(int   a, int   b); float sum(float a, float b); float sum(int   a, float b); float sum(float a, int   b); [/code]
처럼 똑같은 모양으로 써놓고 사용하면, 컴파일러가 알아서 인자에 맞는 함수를 골라서 사용합니다..

이외에도 연산자를 새로 정의해서 사용할 수 있는 연산자 오버로딩을 지원합니다.

5. 동적할당/해제 키워드인 new와 delete가 추가되었다.
- C에서는 동적할당/해제를 위해서는 malloc(), free() 등 함수를 사용해야했지만 C++에서는 키워드 차원에서 지원합니다.

6. 구조체 복사가 가능하다.
- C에서는 구조체 복사가 불가능했습니다. a와 b가 구조체 변수라면 a = b;같은게 안된거죠.. 하지만 C++에서는 가능합니다.

7. struct, union의 기능이 대폭 강화되었다.
- C에서는 객체지향적 개념이 없었기 때문에 stuct와 union의 차이가 분명히 드러났죠.. 하지만 C++에서 등장한 class가 struct와 union의 기능을 모두 수용하기 때문에 솔직히 이 둘은 쓸모가 없어졌습니다.. 하지만 호환성 측면에서 이들을 남겨두었고, 오히려 struct와 union의 기능을 class와 거의 같게 만들어놨죠.. 기존에 불가능했던 멤버함수, 생성자, 소멸자, 멤버변수의 초기화 등이 가능해졌습니다..

이외에도 수많은 것들이 바뀌었습니다..

- 고슴도치