C와 C++의 차이점

2015. 2. 23. 03:52프로그래밍/C/C++

728x90
728x90

1. C는 절차지향, C++ 객체지향?

정확히 말하면 C++는 절차지향과 객체지향을 모두 가진 녀석이라고 한다.

C++는 절차지향이면서 객체지향 컨셉으로 프로그래밍 언어이다.

그러므로 이를 객체지향 언어니 절차지향 언어니 논하기는 어렵다.

둘 다 되는것을 보고 어느 하나라고 말할 수 없다는 것이다.


2. #define vs const

C에서는 상수를 사용할 때 자주 사용하는 #define은 전처리기로써

메인 함수 밖에서 선언하여 사용한다.

C++에선 const 키워드를 통해 메인 함수 내에서 변수를 상수화하여 사용할 수 있다.


3. bool

논리타입인 bool이 생겼다. 1바이트로 0과 1을 출력한다.


4. 동적할당 malloc,free vs new,delete

malloc, free 

- stdlib 헤더의 표준 함수, 메모리 크기만 사이즈만큼 할당/해제 해주는 함수이다.

- void*형을 리턴하므로 사용하기 위해선 적절한 연산자로 캐스팅하여 사용한다.


new, delete 

- c++ 언어가 제공하는 연산자이다.

- 사용자 정의 타입에 대해 오버로딩할 수도 있다.

- 할당할 타입을 지정하고 해당 타입의 포인터를 리턴하므로 캐스팅이 필요없다.

- 객체를 할당할 때 생성자, 삭제할 때는 소멸자를 자동으로 호출한다.(가장 큰 차이)


5. 함수에 디폴트 매개변수를 지정할 수 있다.

함수 구현부분에 인자값을 지정해주면 입력하지 않았을 시 기본값으로 들어간다.

ex) void function(int a = 10, int b = 20);


6. #define vs inline

전처리기를 이용한 매크로 함수와 비슷한 inline 함수가 있다.

함수원형에 inline 키워드를 써주면 컴파일 시 코드를 직접 함수부분에 입력된다.

함수의 호출이 없기때문에 스택영역을 잡아먹을 일이 없어 함수 호출 오버헤드를 없애줘 속도가 빨라진다.


#define 매크로 함수와는 다르게 타입을 인식하여 잘못된 타입으로 발생하는 민감한 에러처리에 유리하며,

컴파일러의 산술변환 서비스도 받을 수 있다.

필요한 경우 지역변수도 사용 가능하며 값에 의한 인수 전달과 연산자 우선순위, 결합법칙이

적용되기 때문에 매크로 함수의 위험성을 피할 수 있다.


7. 같은 이름에 다른 기능을 할 수 있는 오버로딩의 개념이 추가되었다.


8. 변수 선언이 필요한 곳 어디서나 선언이 가능하다.


9. 구조체의 태그가 타입으로 승격했다.

typedef를 사용할 필요가 없다.


@C구조체와 C++ 구조체의 차이

C 구조체 - 타입이 같거나 서로 다를수도 있는 1개 이상의 변수들의 집합이다.

C++ 구조체

- 변수뿐만 아니라 멤버 함수를 포함할 수 있어 스스로 동작할 수 있는 독립성이 부여됐다.

- 접근 제어지시자(private, protected, public) 사용을 통해 멤버 접근 권한을 지정할 수 있다.

- 상속이 가능하다.

- 가상 함수를 활용한 다형성을 지원한다.


@C++ 구조체와 클래스의 차이

- 문법적으로는 구조체는 기본이 public, 클래스는 기본이 private인 것을 제외하곤 100% 일치한다!

- 관습적으로는 구조체는 데이터형의 묶음, 클래스는 데이터와 기능의 묶음으로 많이 사용한다.


10. 동일한 명칭의 충돌을 방지할 수 있는 네임스페이스가 추가되었다.


11. try ~ throw ~ catch의 예외처리를 지원한다.


12. ::(범위지정연산자)를 통해 전역변수를 접근할 수 있다.

함수 내부에 같은 변수명이 선언되면 사용할 수 없는 문제를 해결할 수 있다.


13. 생성자를 이용한 선언방식이 추가되었다.

ex) int a(10);


14. 접근 제어 지정자를 통해 데이터의 외부 접근을 막을 수 있다.

ex) private, protected, public




728x90
반응형