객체지향

이승덱·2021년 7월 21일

CPP

목록 보기
34/70
#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;

}
profile
공부 기록용 블로그입니다

0개의 댓글