My Profile Photo

DongChanS's blog


수학과 학생의 개발일지


C언어와는 차별되는 C++의 특징

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

comments powered by Disqus