C++ Rookiss Part1 C++ 프로그래밍 입문 : 객체지향 마무리
🙇♀️객체지향 마무리
🪐struct vs class
C++에서 struct나 class나 종이 한 장 차이다.
struct는 기본 접근 지정자가 public이고, class는 private이다.
- 왜 이렇게 했을까?
- C++은 C언어에서 파생되어 발전했기 때문에, 호환성을 지키기 위함.
- struct는 그냥 구조체(데이터 묶음)을 표현하는 용도.
- class는 객체 지향 프로그래밍의 특징을 나타내는 용도
🪐static 변수, static 함수
static은 객체에 종속적이지 않는다.
- static 변수
class Marine
{
public:
// 특정 마린 객체에 종속적
int _hp;
// 특정 마린 객체와 무관
// 마린이라는 '클래스' 자체와 연관
static int s_attack; // 설계도상으로만 존재
};
s_attack
은 클래스 밖에서 초기화해주는데 클래스에서 꺼내어 쓰기떄문에 범위 지정 연산자인 ::
을 사용한다.
Marine::s_attack = 0;
처럼 초기화 하면 된다.
- static 함수
int GenerateId()
{
// 생명주기 : 프로그램 시작/종료 (메모리에 항상 올라가 있음)
// 가시범위 : 함수 내부
// 정적 지역 객체
static int s_id = 1;
return s_id++;
}
여기서 s_id
는 함수가 실행될 때 마다 1로 초기화되는 것이 아니라 메모리에 항상 올라가 있어서 값이 올라간다.
cout << GenerateId() << endl;
cout << GenerateId() << endl;
cout << GenerateId() << endl;
cout << GenerateId() << endl;
cout << GenerateId() << endl;
출력결과는 아래에 나와있다.
- static 변수는 어떤 메모리일까?
- 초기화 하면 .data
- 초기화 안하면 .bss
결론적으로 data영역에 있다. 스택 메모리에 있지 않다는게 포인트!