[C++] 클래스와 객체
REF : 윤성우의 열혈 C++
C++의 구조체는 클래스의 일종.
클래스는 변수를 선언할 때, 선언과 동시에 초기화하지 못한다.
class A
{
char name[];
int test1;
int test2;
};
int main()
{
A test = {"asdf", 100, 100};
}
클래스 내부의 변수는 클래스 내에 선언된 함수에서만 사용할 수 있다.
따라서, 클래스는 정의를 하는 과정에서 각각의 변수와 함수의 접근 허용범위를 별도로 선언해야한다.
접근제어 지시자
접근 제어 지시자가 선언된 줄 아래의 변수나 함수는 해당 접근제어 지시자의 의미대로
호출범위
가 한정된다.
- public : 어디에서든 접근 허용
- protected : 상속관계 하에서, 유도 클래스에서 접근 허용
- private : 클래스 내에서만 접근 허용
- 접근제어 지시자가 선언되면 그 이후에 등장하는 변수, 함수는 해당 접근제어 지시자가 허용하는 범위 내에서만 접근할 수 있다.
- struct 키워드로 구조체를 정의하면 접근제어 지시자가 없다면 모든 변수와 함수는 public이 된다.
- class 키워드로 클래스를 정의하면 접근제어 지시가자 없다면 모든 변수와 함수는 private가 된다.
객체, 멤버변수, 멤버함수
구조체와 클래스는 변수의 성격만 지니지 않는다.
각각의 함수를 사용할 수 있어서 변수의 성격만 지니지 않기때문에 객체
라는 표현을 사용한다.
해당 클래스를 구성하는 변수를 멤버 변수
클래스를 구성하는 함수를 멤버 함수
라고 한다.
C++에서 클래스 분할
C++은 클래스별로 헤더파일과 소스파일을 따로 생성한다.
A
라는 클래스가 있다면,
A.h
A클래스의 선언
A.cpp
A 클래스의 정의(멤버함수 정의)
컴파일러는 A.h
를 전처리 과정에서 가장 먼저 처리해 include하는데,
만약 A.cpp 및 이를 사용하는 소스 파일들에서 A.h
에 선언된 클래스의 접근제어 지시자를 어기는 등의
오류를 범하면 오류를 잡아내게된다.
단, 인라인 함수는 헤더파일에 함께 넣어야한다.
인라인 함수가 전처리 과정에서 인라인 함수의 몸체부분이 함수 호출부분과 대체되기때문에,
헤더파일에 미리 넣어야한다.
댓글남기기