🙇‍♀️객체지향 마무리 복습

  1. struct vs class
    • struct는 기본 접근 지정자가 public이고 class는 기본 접근 지정자가 private이다
  2. static 변수, static 함수 (static = 정적 = 고정된)


🪐struct vs class

기본 접근자가 무엇인지 다르고 나머지는 거의 모두 비슷하게 작용한다.

비슷하게 작용하는데 왜 필요할까?

정확한 이유는 모르지만 C++은 C에서 발전되어 파생되었기 때문에 C에서의 struct(구조체 : 자료 모음)이 C++에서의 class(객체지향)와 비슷하게 된것 같다.

비슷하게 작용하지만 만들어진 이유를 생각하여서 struct는 단순 자료 모음집으로 class는 객체지향적으로 사용할 필요가 있어 보인다.


🪐static 변수, static 함수

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


class Marine
{
public:
	void TakeDamage(int damage) // 일반 멤버 함수
	{
		_hp -= damage;
	}

	static void SetAttack(int attack) // static 멤버 함수
	{
		s_attack = attack;
	}

public:
	// 특정 마린 객체에 종속적
	int _hp;

	// 특정 마린 객체와 무관
	// 마린이라는 '클래스' 자체와 연관
	static int s_attack;
};

int Marine::s_attack = 0;


int main()
{

    // 마린 공격력 업그레이드!
    Marine::s_attack = 7;
    Marine::SetAttack(8);

}

class내에서 객체 하나하나 값을 변경하는게 아니라 모두가 변경되는 그런 변수들을 static으로 잡으면 쉽게 관리 가능하다

static은 함수로도 만들수 있는데 이때 변수는 static변수만 사용가능!


int Generateld()
{
	// 생명주기: 프로그램 시작/종료 (메모리에 항상 올라가 있음)
	// 가시범위: 함수 내부

	// 정적 지역 객체
	static int s_id = 1;

	return s_id++;
}

int main()
{

	// 스택아님. .data 영역
	static int id = 10;
	int a = id;

	return 0;
}

static의 생명주기는 프로그램을 따라가지만 가시 범위는 함수내부에서 그친다.

id발급 등에서 유용하게 사용된다.

태그:

카테고리:

업데이트: