클래스의 선언
클래스의 선언
클래스란 객체 지향 프로그래밍의 특징 중 하나인 추상화(abstraction)를 사용자 정의 타입으로 구현한 것이라 할 수 있습니다.
C++에서 이러한 클래스를 선언하는 방법은 구조체를 선언하는 방법과 거의 같습니다.
구조체는 struct 키워드를 사용하지만, 클래스는 class 키워드와 접근 제어 지시자를 함께 사용합니다.
C++에서 클래스는 다음과 같이 정의합니다.
정의
class 클래스이름
{
접근제어지시자1:
멤버변수1의타입 멤버변수1의이름;
멤버변수2의타입 멤버변수2의이름;
...
멤버함수1의 원형
멤버함수2의 원형
...
};
다음은 Book이라는 이름의 클래스를 정의하는 그림입니다.
접근 제어 지시자는 객체 지향 프로그래밍의 특징 중 하나인 정보 은닉(data hiding)을 위한 키워드입니다.
public 영역은 모든 객체에서 접근할 수 있지만, private 영역은 해당 객체 내의 멤버 변수나 멤버 함수만이 접근할 수 있습니다.
접근 제어 지시자에 대한 더 자세한 사항은 C++ 접근 제어 수업에서 확인할 수 있습니다.
이렇게 선언된 클래스의 정의를 가지고 다음과 같이 Book 객체를 선언할 수 있습니다.
선언
클래스이름 객체참조변수이름; Book web_book;
예제
Book web_book;
멤버 함수의 정의
클래스에서 멤버 함수를 정의하는 방법은 일반 함수의 정의와 크게 다르지 않습니다.
C++에서는 멤버 함수를 클래스의 선언 안이나 밖에서 모두 정의할 수 있도록 허용합니다.
클래스의 선언 밖에서 멤버 함수를 정의할 때에는 범위 지정 연산자(::)를 사용하여 해당 함수가 어느 클래스에 속하는지를 명시해야 합니다.
문법
반환타입 클래스이름::멤버함수이름(매개변수목록) { 함수의 몸체; }
다음 예제는 클래스 선언 밖에서 Book 클래스의 Move() 멤버 함수를 정의하는 예제입니다.
예제
void Book::Move(int page) { current_page_ = page; }
만약 멤버 함수가 클래스의 선언 안에서 정의되면, 이 함수는 인라인 함수로 처리되어 위와 같이 범위 지정 연산자를 사용하여 소속 클래스를 명시할 필요가 없게 됩니다.
또한, 클래스 선언 밖에서 정의된 멤버 함수도 inline 키워드를 사용하여 인라인 함수로 처리할 수 있습니다.
이처럼 하나의 클래스에서 생성된 인스턴스는 각각 독립된 메모리 공간에 저장된 자신만의 멤버 변수를 가지지만, 멤버 함수는 모든 인스턴스가 공유하게 됩니다.
멤버 함수의 호출
C++에서 위와 같이 정의한 멤버 함수를 호출하는 방법은 구조체의 경우와 같습니다.
멤버 함수는 멤버 참조 연산자(.)를 사용하여 호출할 수 있습니다.
멤버 함수를 호출하는 방법은 다음과 같습니다.
문법
1. 객체이름.멤버함수이름(); // 매개변수가 없는 멤버 함수의 호출
2. 객체이름.멤버함수이름(전달할인수목록); // 매개변수가 있는 멤버 함수의 호출
예제
web_book.Move(30);