#include <iostream>
#include<iomanip>
using namespace std;
//객체지향 마무리
//1) struct vs class
//C++에서는 struct나 class나 종이 한 장 차이이다!
//struct는 기본 접근 지정자가 public이고 class는 private이다.
//왜 이렇게 했을까? C++은 C언어에서 파생되어 발전했기 때문에, 호환성을 지키기 위함.
// - > struct는 그냥 구조체 (데이터 묶음)을 표현하는 용도
// - > class는 객체 지향 프로그래밍의 특징을 나타내는 용도
struct TestStruct {
int _a;
int _b;
};
class TestClass{
int _a;
int _b;
};
//2) static 변수, static 함수 ( static = 정적 = 고정된)
//전역으로 선언한 것과 다를바가 없어짐
//static 함수는 멤버 변수나 함수를 호출할 수 없다.
//static 변수는 어떤 메모리?
//초기화하면 .data
//초기화 안하면 .bss
class Marine {
public:
//특정 마린 객체에 종속적
int _hp;
//특정 마린 객체에 종속적
void TakeDamage(int damage) {
_hp -= damage;
}
static void SetAttack() {
s_attack = 10;
}
// static 변수가 될 경우 마린 클래스에 종속된 변수가 된다!+
//특정 마린 객체와는 무관하다
static int s_attack; //설계도상으로만 존재함
};
//외부 선언이 필요
int Marine::s_attack=0;
class Player {
public:
int _id;
};
int GeneratedId() {
//생명주기: 프로그램 시작/종류 (메모리에 항상 올라가 있음)
//가시범위: 함수 내부에서만 사용할 수 있음
//정적 지역 객체
static int s_id = 1;
return s_id++;
}
int main()
{
//TestStruct ts;
//ts._a = 1;
//TestClass tc;
//tc._a = 1;
Marine m1;
m1._hp = 40;
//m1.s_attack = 6;
Marine::s_attack = 6;
Marine m2;
m2._hp = 40;
//m2.s_attack = 6;
//마린 공격력 업그레이드 완료!( Academy에서 업그레이드 끝! )
Marine::s_attack = 7;
Marine::SetAttack();
//m1.s_attack = 7;
//m2.s_attack = 7;
//1씩 증가한다!
cout << GeneratedId() << endl;
cout << GeneratedId() << endl;
cout << GeneratedId() << endl;
cout << GeneratedId() << endl;
cout << GeneratedId() << endl;
}