모든 내용은 [윤성우 저, "열혈 C++ 프로그래밍", 오렌지미디어] 를 기반으로 제 나름대로 이해하여 정리한 것입니다. 다소 부정확한 내용이 있을수도 있으니 이를 유념하고 봐주세요!
# C++의 헤더파일의 확장자는 C언어와 마찬가지로 .h이다.
그러나, 표준 헤더파일 선언에서는 확장자를 생략하기로 약속되어 있다.
(e.g. string.h => cstring)
# 입출력에 대해 별도의 포맷을 지정 할 필요가 없다.
- C언어는
int형 <=> %d
float형 <=> %f
double형 <=> %lf
C-str형 <=> %s
...
처럼 자료형에 따라 별도의 포맷을 지정해야 한다.
- 반면에, C++은
cout, cin을 통해 입출력하면 별도의 포맷을 지정할 필요가 없다.
이는 cout, cin 객체의 클래스가
자료형들에 대해 연산자 오버로딩이 되어 있기 때문이다.
# cin>>변수1>>변수2>>; 와 같은 형태처럼 연속적인 데이터 입력 요구가 가능하다.
- 데이터 간의 경계는 탭, 스페이스바, 엔터키 입력과 같은 공백에 의해 나뉨
- 공백을 포함한 입력을 받고싶다면? => cin.getline(buf,size,delim='\n');
# C++은 C와 다르게 함수 오버로딩을 허용한다.
- C는 (함수의 이름)만 이용해 호출대상을 찾으나,
C++은 (함수의 이름 + 매개변수의 선언)을 통해 호출대상을 찾는다.
- 함수 오버로딩은 함수명은 동일하되, "매개변수의 자료형 또는 개수"가 달라야 하며,
"반환형"은 호출되는 함수를 구분하는 기준이 될 수 없다.
# 매개변수에 디폴트값을 설정이 가능하다.
- 디폴트값은 함수의 (원형)선언 부분에만 표현하면 된다.(함수의 정의 부분에는 표현하지 않는다.)
- 부분적으로 디폴트값을 설정할 수는 있으나, 반드시 오른쪽 매개변수부터 채우는 방향으로만 가능하다.
함수에 전달되는 인자가 왼쪽부터 채워지기 때문이다.
# 인라인함수 : 함수의 몸체부분이 함수의 호출문을 대체
- 매크로 함수 장점
1) 인수 타입을 신경쓰지 않아도 된다.
2) 함수호출에 의한 성능 저하가 없다.(해당 함수로 점프했다가 다시 돌아오지 않아도 된다.)
- 매크로 함수 단점
1) 복잡한 함수 구현이 어렵다.
2) 가독성이 떨어진다.(모든 인수에 대해 괄호를 해야하기 때문이다.)
- 매크로 함수의 장점은 취하고 단점을 제거한 것이 "인라인함수"이다.
- 인라인 함수 원형 선언 : inline 반환형 함수이름(매개변수)
- 매크로를 이용한 함수의 인라인화는 전처리기에 의해 처리되지만,
키워드 inline을 이용한 함수의 인라인화는 컴파일러에 의해 처리된다.
- 컴파일러가 스스로 인라인화 유무를 결정하기도 하기도 한다.
# 그러나, inline 함수가 매크로 함수의 모든 장점을 취한 것은 아니다.
인수의 타입을 신경써주어야 하기 때문이다.
그런데, 템플릿을 통해 자료형에 의존적이지 않게 만들 수 있다.
=> inline + 템플릿 : 특정상황에서 함수호출로 인한 오버헤드를 대체할 수 있다.
# namespace : (변수, 함수 등) 이름충돌의 문제점을 해결하기 위해 사용된다.
- ::(범위지정연산자) : 이름공간을 지정할때 사용하는 연산자로, 전역변수 접근에도 사용이 가능하다.
e.g. namespace이름 :: (변수명 또는 함수명)
- namespace 내에서도 함수의 선언과 정의의 분리를 적용할 수 있다.
# 구조체, 클래스 내에서 "함수를 정의"하면 인라인으로 처리하라는 의미이다.
- 함수의 선언과 정의를 분리하면 이러한 의미가 사라지므로 그 의미를 유지하려면 inline 키워드를 사용해야한다
- inline 키워드는 함수의 원형이나 정의 어느 한 쪽에만 표기해도 되며, 양쪽 다 표기해도 상관이 없다.
[출처] : 윤성우 저, "열혈 C++ 프로그래밍", 오렌지미디어
'Programming > 열혈 C++ 프로그래밍(저자 윤성우)' 카테고리의 다른 글
Ch 06. friend와 static 그리고 const (0) | 2020.08.17 |
---|---|
Ch 05. 복사 생성자(Copy Constructor) (0) | 2020.08.17 |
Ch 04. 클래스의 완성 (0) | 2020.08.17 |
Ch 03. 클래스의 기본 (0) | 2020.08.17 |
Ch 02. C언어 기반의 C++ 2 (0) | 2020.08.17 |