🙇‍♀️객체지향 마무리

🪐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함수의 성질

  • static 변수는 어떤 메모리일까?
    • 초기화 하면 .data
    • 초기화 안하면 .bss

결론적으로 data영역에 있다. 스택 메모리에 있지 않다는게 포인트!

태그:

카테고리:

업데이트: