모든 내용은 [윤성우 저, "열혈 C++ 프로그래밍", 오렌지미디어] 를 기반으로 제 나름대로 이해하여 정리한 것입니다. 다소 부정확한 내용이 있을수도 있으니 이를 유념하고 봐주세요!
# 특정 상수들이 특정 구조체나 클래스에만 의미있는 상수들이라면, enum(열거형)의 활용이 가능하다.
1) enum을 구조체 또는 클래스 안에 넣어 활용한다.
2) 1)이 부담스럽다면, 이름공간(namespace)을 이용해 상수가 사용되는 영역을 명시한다.
# 클래스 안에는,
1) 변수의 선언(멤버변수)
2) 함수의 원형선언(멤버함수)
으로 구성하고, 인라인화 할 것이 아니라면 가능하면 함수의 선언과 정의를 분리하자.
(함수의 선언과 정의를 분리해도 inline 키워드를 사용하면 인라인화가 가능하다.)
- 함수가 클래스 내에 "정의"되어 있으면 인라인화 하라는 의미가 내포되는데,
함수 정의를 외부로 빼내면, 의미가 사라진다.
- 따라서 인라인화 하라는 의미를 유지하고 싶으면,
키워드 inline을 함수의 선언 또는 정의에 따로 명시해주어야 한다.
- inline 함수는 함수의 호출문장이 컴파일과정에서 컴파일러에 의해 함수의 몸체로 대체되어야 하므로,
inline 함수의 정의는 클래스 내의 inline 함수의 선언과 동일한 파일에 저장되어서
컴파일러가 동시에 참조할 수 있게 해야한다.
# 함수 정의 방법
반환형 클래스명::함수이름(매개변수)
{
(함수 몸체 부분 ...)
}
# 클래스 (private)멤버변수는 기본적으로 (public)멤버함수를 통해서만 접근이 가능하다.
# 접근제어 지시자(레이블)
- public : 어디서든 직접 접근허용
- protected : 클래스 내 + 유도 클래스에서 직접 접근허용
- private : 클래스 내에서만 직접 접근허용
# 구조체와 클래스의 차이는 접근제어 지시자를 선언하지 않았을때
- 구조체의 default는 public
- 클래스의 default는 private
# 클래스(멤버함수)의 선언과 정의 분리를 위해서라도,
클래스 별로 헤더파일과 소스파일을 생성해서 코딩하는 습관을 기르자.
- 클래스의 선언 : 헤더파일에 저장, 해당 클래스와 관련된 문장의 컴파일 정보로 사용됨
- 클래스의 정의 : 소스파일에 저장, 컴파일 된 이후 링커에 의해 하나의 실행파일로 묶이기만 하면 됨
# 클래스의 정의 부분을 컴파일 하는데도 클래스의 선언 정보가 필요하다.
따라서, 헤더파일 포함해야 하며 헤더파일의 중복 방지는 반드시 하도록 하자.
e.g.)
#ifndef __TEST_H__ /* 헤더파일의 중복 방지 */
#define __TEST_H__
class Test
{
....
};
#endif
# 컴파일러는 "파일 단위"로 컴파일 함을 유의하자.(파일 별로 독립적이며, 서로 참조하지 않는다.)
- 컴파일은 파일 단위로 하며, 이를 합쳐 하나의 실행파일을 만든다.
- 컴파일을 파일 단위로 하기에, 인라인 함수의 선언과 정의를 함께 두는 것이다.
# 절차지향과 객체지향은 정반대의 것이 아니다.
- 객체지향이라고 해서 "절차성"이 없는 것은 결코 아니다.
# 객체 = 데이터(멤버변수) + 기능(멤버함수)
- 클래스는 객체 생성을 위한 틀이다.
- 멤버변수는 일반적으로 선언과 동시에 초기화가 가능하지 않다.
- 따라서 멤버변수를 상수화하고 싶다면, 생성자의 "멤버 이니셜라이저"를 통해서만 가능하다.
[출처] : 윤성우 저, "열혈 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 02. C언어 기반의 C++ 2 (0) | 2020.08.17 |
Ch 01. C언어 기반의 C++ 1 (0) | 2020.08.17 |