1. struct 와 class 의 차이
C++ 에서는 struct 와 class 가 동일하게 작동한다.
그러나 동일한 코드를 작성하여 실행하면 오류가 발생하게 된다.
struct TestStruct
{ //public:
int _a;
int _b;
};
class TestClass
{ //private:
int _a;
int _b;
};
int main()
{
TestStruct ts;
ts._a = 1;
TestClass tc;
tc._a = 1;
return 0;
}
struct에서는 기본값으로 public가 생략되어있고, class에서는 private이 기본값으로 생략되어있다.
struct 는 데이터의 묶음을 표현하는 용도,
class는 객체 지향 프로그래밍의 특징을 나타내는 용도로 쓰인다.
2. static 변수, static 함수
(1) 하나의 클래스를 상속받은 객체들이
서로 다를 수 있는 값을 가지는 경우에는 int 형으로 (객체에 종속적)
서로 동일한 값을 가지는 경우에는 static 형으로 적용한다.
class Marine
{
public:
int _hp;
int attack;
};
int main()
{
Marine m1;
m1.attack = 6;
m1._hp = 40;
Marine m2;
m2.attack = 6;
m2._hp = 40;
// 마린의 공격력 업그레이드가 완료되었으면
m1.attack = 7;
m1._hp = 7;
return 0;
}
위의 코드를 아래로 바꿀 수 있다.
class Marine
{
public:
int _hp;
static int s_attack;
};
int Marine::s_attack = 0;
int main()
{
Marine m1;
m1._hp = 40;
Marine::s_attack = 6;
Marine m2;
m2._hp = 40;
// 마린의 공격력 업그레이드가 완료되었으면
m1._hp = 7;
Marine::s_attack = 7;
return 0;
}
(2) static 함수
이번에는 객체가 공격을 받아 hp가 감소하는 상황을 만들어보자.
class Marine
{
public:
int _hp;
void TakeDamage(int damage)
{
_hp -= damage;
}
static int s_attack;
};
이렇게 하면 객체에 종속적인 TakeDamage 함수를 만들 수 있다.
참고로 static이 붙은 함수는 멤버 변수를 변경할 수 없다.
즉 아래처럼 구현할 수 없다.
class Marine
{
int _hp;
//~~
static void SetHP();
{
_hp = 100;
}
//~~
};
2. 정적 변수와 정적 함수의 특징
(1) 생명주기 : 프로그램이 시작되면서 생성되며 프로그램이 종료되면 소멸한다(메모리에 상주함).
int GenId()
{
int s_id = 1;
return s_id++;
}
위의 함수는 함수를 호출할 때 마다 s_id가 1로 초기화 되지만, static을 이용한 정적 함수는
int GenId()
{
static int s_id = 1;
return s_id++;
}
프로그램이 시작될 때 최초에 1회만 s_id가 1로 초기화 된다.
'기초 C++ 스터디 > 객체지향' 카테고리의 다른 글
6-2. 형(type) 변환 (1) (0) | 2023.05.31 |
---|---|
6-1. 동적 할당 (0) | 2023.05.31 |
5-6. 연산자 오버로딩 (0) | 2023.05.30 |
5-5. 초기화 리스트 (0) | 2023.05.26 |
5-4. 다형성 (0) | 2023.05.26 |