C와 C++의 차이점
단순히 객체지향 개념이 추가된 것 뿐만이 아니라 C++와 C는 많은 차이가 존재한다고 하는데요.
C++을 배울 때는 이러한 차이점을 주의깊게 생각하고 배우는 것이 좋을 것 같습니다.
http://www.lb-stuff.com/cc를 참고, 요약했습니다.
강조
C++도 시대가 지나면서 많이 발전해왔다.
| Year | C | C++ | Java | |
|---|---|---|---|---|
| 1970 | Unix time begins. | |||
| 1971 | Apollo 14. | |||
| 1972 | Pong. | |||
| 1973 | C invented(ish) | Watergate scandal. | ||
| 1974 | Rubik’s Cube. | |||
| 1975 | Microsoft. | |||
| 1976 | Apple. | |||
| 1977 | Voyager. | |||
| 1978 | K&R C | RSA. | ||
| 1979 | “C with Classes” in development | Alien. | ||
| 1980 | Pac-man. | |||
| 1981 | Donkey Kong / Mario. | |||
| 1982 | First computer virus. | |||
| 1983 | Renamed to C++ | GNU. | ||
| 1984 | Macintosh. | |||
| 1985 | “The C++ Programming Language” released | Windows. | ||
| 1986 | First laptop computer. | |||
| 1987 | DNA fingerprinting. | |||
| 1988 | Photoshop. | |||
| 1989 | ANSI C / C89 | C++ 2.0 | Stealth Bombers. | |
| 1990 | C90 (== C89) | World Wide Web. | ||
| 1991 | Java project started | Sonic. | ||
| 1992 | Batman Returns. | |||
| 1993 | PDF. | |||
| 1994 | PlayStation. | |||
| 1995 | Java Alpha/Beta | I was born. | ||
| 1996 | Java 1.0 | Google. | ||
| 1997 | Java 1.1 | Space Shuttle Discovery. | ||
| 1998 | C++98 | Java 1.2 | XML. | |
| 1999 | C99 | HTTP/1.1. | ||
| 2000 | Java 1.3 | Y2K. | ||
| 2001 | Wikipedia, Windows XP, iPods, C#. | |||
| 2002 | Java 1.4 | JSON. | ||
| 2003 | C++03 | Volkswagen Beetles stop being produced. | ||
| 2004 | Java 5.0 | Facebook. | ||
| 2005 | YouTube. | |||
| 2006 | Java 6 | Twitter. | ||
| 2007 | C++TR1 | Portal. | ||
| 2008 | I started learning C++. | |||
| 2009 | Minecraft. | |||
| 2010 | Inception. | |||
| 2011 | C11 | C++11 (C++0x) | Java 7 | Qubits. |
| 2012 | The world didn’t end. | |||
| 2013 | Antichamber. | |||
| 2014 | C++14 (C++1y) | Java 8 | This article was written. | |
| 2015 | GTAV on PC. | |||
| 2016 | Java 9? | Juno spacecraft arrives at Jupiter. | ||
| 2017 | C++17? (C++1z) | Classified JFK declassified. | ||
| 2018 | Java 10? | Launch of the Mars sample return mission. | ||
| 2019 | Copyrighted works from 1923 enter the public domain. | |||
| 2020 | C++20? | Russia mines helium from the moon. |
- 1979년만 해도 C++은 C에서 클래스가 추가된 개념에 불과했었음.
- C++11에 이르면서, C++는 많이 변화됨. (C++03에 비해서)
차이점
-
Const-correctness : C에서의
const_cast의 단점을 해결하기 위한 const 키워드 -
RAII (Resource Acquision Is Initialization)
자원의 안전한 사용을 위해, 객체의 scope를 벗어나면 자동으로 해제해주는 기법
- C++11 의 스마트 포인터(shared_ptr, unique_ptr)를 이용
- heap 메모리뿐만이 아니라, 파일이나 db도 전부 안전하게 사용가능
-
Template metaprogramming
템플릿을 이용해서 여러 타입에 대한 클래스, 함수들을 쉽게 만들 수 있음.
-
Lambda : 익명함수를 간단하게 만들 수 있는 방법
-
std::function,std::bind: 함수포인터의 문제점을 해결하기 위한 클래스 참고링크- 함수포인터 : 함수들만 보관할 수 있는 객체
std::function: 함수 뿐만 아니라 모든 Callable (ex, 구조체, 클래스 메서드)들을 보관할 수 있는 객체std::bind: 특정 인자의 값을 지정해서 함수를 보관할 수 있는 객체
-
std::string: C++에서 추가된 문자열 클래스, C와는 달리 null값으로 끝나지 않기 때문에 null character를 가질 수 있음.