C++ 언어는 1980년대 초에 벨 연구소의 비얀 스트로스트룹(Bjarne Stroustrup)이 C언어를 기초로 하여 만들었다. C++ 은 C의 문법을 그대로 유지하면서 OOP(객체 지향 프로그래밍)기능을 추가하였다. 이 언어의 이름에 사용된 ++은 C언어의 증가 연산자를 의미하여 C보다 한 단계 더 발전했다는 뜻을 가지고 있다. C++의 OOP 문법은 Simula67이라는 언어의 문법을 참조하여 만들어진 것이다.
80년대 후반 소프트웨어가 하드웨어의 발전을 따라잡지 못하는 소프트웨어의 위기 문제가 대두되었으며 그 해결책으로 OOP가 제시되었다. 당시 C++은 소프트웨어 위기의 해결사로 인식되었으며 90년부터 본격적으로 사용되기 시작하여 지금은 대부분의 대형 프로젝트에 활용되고 있다. C++은 C언어에 비해 클래스, 상속, 다형성, 템플릿 등이 추가되었다. 이외에 기존 C언어로부터 물려받은 문법도 확장되었는데 다음은 대표적인 몇 가지 예이다.
① 한줄 주석은 //로 표기할 수 있다.
② 새로운 진위형인 bool 타입을 추가했다.
③ 구조체나 열거형의 태그 이름을 하나의 타입으로 인정한다.
④ 함수 중간에서 변수를 선언할 수 있다.
그렇다면 C와 C++ 두 언어의 관계는 과연 어떻게 정의될 수 있을까? 이 질문에 대해서는 학자에 따라 다양한 의견이 제시되고 있어 명확한 결론을 내리기 어렵다. C++이 C를 기반으로 하고 있고 C의 기능 대부분을 쓸 수 있으므로 C++이 C의 상위 버전이라는 주장이 있는 반면 C++이 C를 완전히 포함하지는 못하며 두 언어의 개발 방법이 워낙 판이하게 다르기 때문에 아예 다른 언어라고 보는 학자도 있다. 이 질문에 대한 해답은 각자가 공부를 마친 후 생각해 보기 바라되 나는 C++이 C의 상위 버전이며 그렇게 보는 것이 타당하다고 생각한다.

실제로 C의 문법 중 C++이 지원하지 못하는 부분도 있는데 이런 문법은 대부분 안정성, 이식성에 문제가 있거나 더 좋은 해결 방법이 있어 제외된 것들이다. 두 언어의 개발 방법이 다르다는 주장은 실제로 사실이며 문제 해결을 위한 접근 방법 자체가 다르다. 그러나 C++은 객체 지향한 지원하는 것이 아니라 C의 구조적 개발 방법도 여전히 지원하며 필요할 경우 C++로도 C 스타일의 프로그램을 작성할 수 있다. 구조적 프로그래밍 방법 객체 지향보다 열등하다고 생각하는 것도 일종 고정 관념일 뿐이며 필요하다면 쓸 수도 있다.
C++도 C와 마찬가지로 초창기에는 무분별한 기능 추가로 인해 호환성의 문제가 있었는데 90년대 초반의 볼랜드 C++과 비주얼 C++이 서로 호환되지 않았던 것이 대표적인 예이다. C++의 첫 번째 표준안인 ISO 14882는 98년에 발표되었다. 이 표준안은 89년에 제정된 ANSI C와 95년에 개정된 C95를 기반으로 하며 C++의 객체 지향적인 기능을 추가하여 작성된 것이다. 그래서 ANSI C의 기능 대부분을 흡수하고 있다. 그러나 시기적으로 1년 더 늦은 99년에 새로 제정된 C99 표준을 포함하지는 못하며 그래서 14882는 9899:1999와는 다소 다른면이 있다. 이후 C와 C++은 상호 영향을 미치며 서로 다른 모습으로 발전해 나갈 것으로 예상된다.

그렇다면 이번에는 문제를 달리하여 지금 이 책을 읽는 사람은 C를 중심으로 공부를 할 것인가 아니면 C++을 중심으로 공부할 것인가를 생각해보자. 결론은 C++을 선택하는 것이 절대적으로 옳다는 것이다. 기능이 부족하다 하여 C를 무시하는 것은 좋지 않는 태도이지만 그렇다고 해서 C가 C++의 기반이므로 순수한 C를 먼저 배운후 C++을 나중에 배우겠다는 태토는 더 곤란하다. 주석은 무슨 일이 있어도 /* */로만 표기하고 변수는 반드시 함수 선두에만 선언해야 한다고 생각할 필요는 없다.
C++ 창시자인 스트로스트룹은 C++이 C의 모든 영역을 커버할 수 있다고 자신있게 떠들고 다닌다. 물론 학자들은 이 말에 절대적으로 공감하지 않으며 실제로 사실도 아니지만 적어도 그의 말이 99.9% 이상의 경우에 적용된다는데는 동의한다. 현재 출시되고 있는 컴파일러들은 대부분 C++ 컴파일러이며 C 전용 컴파일러는 구경하기가 쉽지 않다. 그래서 처음 C에 입문하는 사람들은 좋건 싫건 C++ 컴파일러로 시작할 수 밖에 없는 상황이다.
이 책은 98년에 발표된 ISO 14882를 기준으로 작성되어 있다. 저반부는 주로 C언어로부터 물려받은 문법들을 설명하여 중반 이후부터 C++의 고유 기능인 클래스를 다룬다. 전반부의 문법 설명 중에도 필요할 경우 C++ 문법이 가끔 등장하여 C의 문법과 비교하는 경우도 있다. 책의 구성이 C, C++로 이루어져 있는 것이 아니라 처음부터 C++ 문법을 다루되 객체 이전과 이후로 나누어져 있다는 점을 알아두기 바란다. 14882를 기준으로 하므로 C99의 확장된 문법 또는 그 이후에 개정되는 C 표준과 맞지 않는 면들이 있을 수 있다. 이런 점은 여러분들이 공부를 마친후 스스로 구분할 수 있을 것이다.
참고
C++은 "씨 플러스 플러스"(C plus plus)라고 읽도록 되어 있다. 그러나 이 발음이 너무 길어 불편하기 때문에 우리나라에서는 통상 "씨뿔뿔"이라고 읽는 경우가 훨씬 더 많다. 원문의 발음을 따르는 것도 좋겠지만 적어도 한글로 된 책에서는 표준보다는 현실적인 발음을 채택하는 것이 더 좋다고 생각하여 이 책에서는 "씨뿔뿔"로 읽기로 한다. 따라서 C++가, C++는, C++를 이라고 하지 않고 C++이, C++은, C++을 이라고 표기할 것이다.