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를 가질 수 있음.