수업기록

클래스에서 약속처럼 자주 사용하게 될 함수


void Initialize();  // 멤버 변수의 초기화 값을 정해주는 함수
void Update();      // 매 프레임 마다 변경되는 데이터의 값을 계산하는 함수
void Release();     // 동적할당한 포인터 메모리 해제 코드를 모아두는 함수


함수명/ 멤버 변수명 / 구조체 명은 데이터에 저장됨. 메모리 할당이 아닌, 그 이름이 데이터 영역 메모리에 저장되어 있음.

지난 숙제 피드백 클래스 안의 멤버 변수를 다루는 것은 그 클래스 안에서 만들자. 즉, student list의 printone함수는 차라리 클래스 내부에 있고, printall에서 그 함수를 호출하는 것이 더 맞다.

생성자 안에서 동적할당하는 것은 권장하지 않음


extern :

다른 파일에 있는 전역 변수를 공유하듯이 사용할 수 있는 문법(키워드) extern은 용량이 없다. 그저 다른 파일에 이런 전역 변수가 있다.라는 것을 알려주는 문법임. 그렇기에 extern 키워드가 붙은 변수는 초기화가 불가능하다.


classconst 1

class{
public : 
	const static m_static;
}

클래스의 멤버 함수로 선언을 할 수는 있지만! 위와 같이 사용하면 이후로 초기화할 수 없다.

방법1) 모던 C++이후 나타난 선언과 동시에 초기화

class{
public : 
	const static m_static = 100;
}

방법2) 이니셜라이저를 사용한 초기화 문법

class{
public : 
	class():m_static(100){}
	const static m_static;
}

방법 2가 더 빠르다!


classconst 2

void draw() const; //이 함수는 읽기 전용 함수이다!
void draw() const{}; //이 함수는 읽기 전용 함수이다!

data 영역 쓰기 /heap 영역 쓰기 / stack 영역 쓰기 모두 가능함

오로지, 멤버 변수 쓰기가 안된다! 그리고 이 함수 안에서 다른 멤버 함수를 넣는 것을 기본적으로 허용하지 않는다. 이유는 호출한 멤버 함수 안에서 쓰기가 발생할 가능성이 있기 때문.

그래서 굳이 써야 한다면 const 멤버 함수를 넣는 것은 가능하다!

같은 함수 이름이지만, const여부에 따라 오버로딩 되어 있을때

void draw() const; //이 함수는 읽기 전용 함수이다!
void draw(); //이 함수는 읽기 전용 함수가 아니다!
CObj obj;
const CObj obj;

이 함수를 가진 ‘객체’가 어떤 객체이냐에 따라 달라짐! const로 객체가 불러지면 읽기 전용 함수가, 그냥 객체가 불러지면 멤버함수가 만들어진다.

mutable이 나타는 것이 이때다! 읽기 전용 함수 임에도 멤버 변수의 쓰기가 필요할 때 사용한다.


숙제 25-03-14 TXTRPG CLASS