2015. 2. 23. 03:52ㆍ프로그래밍/C/C++
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
'프로그래밍 > C/C++' 카테고리의 다른 글
Stroustrup Empty class에 대한 내용 읽어보기 (1) | 2015.03.25 |
---|---|
[c++] main함수의 인자 argc, argv (0) | 2015.03.07 |
부동소수점과 예시 (4) | 2015.03.06 |
기호 이름 읽는 법 (0) | 2015.02.18 |
포인터 넘길 때 주의사항(malloc 예제) (0) | 2015.02.17 |
printf 서식 종류와 출력 (0) | 2015.02.17 |
비주얼 스튜디오에서 가비지 값은 왜 같은가? (0) | 2015.02.15 |