Class
Class 는 같은 집단에 속하는 속성 및 행동을 정의합니다.
- 프로그래밍적으로는 C 에서의 struct 와 비슷한 사용자 정의 데이터 타입입니다.
#include <iostream>
class Number
{
public :
int number;
int getNumber();
};
int Number::getNumber()
{
return number;
}
int main(int argc, char** argv)
{
Number number;
number.number = 1;
// C style standard print
printf("%d", number.getNumber());
// C++ style standard print
std::cout << number.getNumber();
return 0;
}
C에서 struct 는 멤버 변수만을 가질 수 있었지만, C++ 에서의 Class 는 멤버 함수를 가질 수 있습니다.
class 클래스 이름
{
멤버 변수 혹은 멤버 함수
};
클래스 내의 멤버들은 모두 동일 범위에 놓여있는 것으로 간주됩니다.
- 멤버함수 getNumber 는 멤버 number 를 자유롭게 사용할 수 있습니다.
선언과 구현을 분리할 경우에는 Scope(::)를 사용하여 범위를 표기합니다.
int Number::getNumber()
{
return number;
}
위 예제의 경우, Number 클래스의 getNumber 함수라는 의미를 가집니다.
다시 정리하면, 아래와 같습니다.
반환형 Scope명::멤버명
{
구현내용
}
멤버 접근 권한
class Number
{
public :
int number;
int getNumber();
};
모든 클래스의 멤버들은 접근권한이 지정되어야 합니다. 권한은 아래와 같습니다.
- public
- private
- protected
접근권한을 표기한 지점으로 부터 이하의 멤버들은 같은 권한으로 지정됩니다.
- 지정하지 않을 경우 class 의 모든 멤버 권한은 private 입니다.
class Number
{
public :
int number;
int getNumber();
private :
int privNumber;
public :
int pubNumber;
};
클래스 내에서 필요한 만큼 접근 권한을 지정할 수 있습니다.
public
public 권한은 멤버를 클래스 외부에 완전히 공개하겠다는 의미입니다.
.연산자를 통해 외부에서 직접 이 멤버를 사용할 수 있습니다.
class Number
{
public :
int number;
int getNumber();
};
number 와 getNumber 는 public 접근 권한으로 지정되었습니다.
Number number;
number.number = 1;
// C style standard print
printf("%d", number.getNumber());
. 연산자를 통해 직접 접근할 수 있습니다.
private
private 권한은 이 멤버를 클래스 외부에 공개하지 않겠다는 의미입니다.
class Number
{
private :
int number;
int getNumber();
};
number 와 getNumber 는 클래스 외부에서 호출될 수 없습니다.
int Number::getNumber()
{
return number;
}
그러나 getNumber 함수에서 사용하는 number 는 같은 클래스 내의 변수이기 때문에 호출할 수 있습니다.
protected
protected 는 기본적으로는 private 와 동일하지만,
상속 시 부모 클래스의 protected 멤버들을 자식 클래스에 한해 접근할 수 있습니다.
구조체 (struct)의 확장
C++ 에서 구조체는 모든 멤버가 public 접근 권한을 가지는 class 로 취급됩니다. 따라서 C 에서는 가지지 못 했던 멤버 함수를 struct 도 가질 수 있습니다.