Exercise 00 : BraiiiiiiinnnzzzZ

변수의 메모리를 new를 통해 동적 할당하는 경우 데이터는 힙 영역에 저장됨

  • 힙에 저장된 데이터는 프로그램이 끝날때까지 유지되기 때문에 더이상 사용하지 않는 경우 반드시 delete로 해제시켜주어야 함
  • 힙에 할당하는 것은 비교적 속도가 느리고, 포인터를 역참조하여 변수의 값에 접근하는 것 역시 직접 접근하는 것보다는 느림

일반적으로 변수를 선언할 경우 정적 할당되어 데이터는 스택 영역에 저장됨

  • 스택 영역에 저장된 데이터는 해당 변수가 지정된 범위(scope)를 벗어날시 자동으로 해제 및 소멸
  • 스택에 할당하는 것은 비교적 속도가 빠르지만, 스택 자체의 크기가 비교적 작으므로 유의해야함

Exercise 01 : Moar brainz!

new []를 통해 배열을 할당했을 경우 delete []로 짝을 맞춰 해제해주어야 함에 유의


Exercise 02 : HI THIS IS BRAIN

참조 : 내부적으로는 변수의 메모리 주소를 값으로 가지므로 const 포인터와 유사

  • 단, 별도의 메모리 공간에 주소값을 저장하는 포인터와는 달리 참조는 연결된 변수와 같은 메모리 공간을 사용
  • 선언시 반드시 초기화를 통해 특정 변수와 연결시켜주어야 함
  • NULL을 참조할 수 없으며 재할당이 불가능

Exercise 03 : Unnecessary violence

Weapon이 없을 수도 있는 HumanBWeapon을 포인터형으로 선언하여 NULL값을 받을 수 있도록 설정
반면 HumanA는 항상 Weapon을 가지고있으므로 참조형으로 선언

main.cpp에서 HumanA 객체 선언시 두번째 매개변수로 Weapon 객체 자체를 사용하였고, Weapon 객체가 가지고있는 데이터가 변경될 경우 HumanA 객체에도 반영되어야함
따라서 HumanA 객체 생성시 생성자에서 Weapon 객체를 참조형으로 전달, 참조로 전달할시 선언과 동시에 초기화되어야하므로 멤버 초기화 리스트 문법 사용


Exercise 04 : Sed is for losers

파일의 입출력 관련 함수들은 <fstream> 헤더 파일에 선언되어있음
std::ifstream 객체로 데이터를 입력받을 파일을, std::ofstream 객체로 데이터를 출력할 파일을 오픈
fin.is_open() 함수로 파일이 열렸는지 여부를 확인할 수 있음

string.find() 함수는 매개변수로 받는 문자열의 위치를 string에서 찾아서 반환

  • 존재하지 않을경우 std::string::npos로 정의되어있는 값을 반환 string.erase() 함수는 매개변수로 시작위치와 길이를 받아 시작위치에서 길이만큼을 삭제
    string.insert() 함수는 매개변수로 시작위치와 문자열을 받아 시작위치에 문자열을 삽입

표준출력에 문자열을 출력할 때 std::cout << str의 형식으로 사용하는 것처럼, 파일에 문자열을 출력할시 fout << str의 형식으로 사용하면 됨


Exercise 05 : Harl 2.0

함수 포인터는 함수의 원형에서 함수의 이름을 (*fcnPtr)과 같은 형식으로 변형해서 사용
선언한 함수 포인터는 함수 이름과 같은 역할을 하며, 함수 포인터의 배열도 사용 가능함
멤버함수를 함수 포인터로 사용하기 위해서는 Classname::을 붙여서 사용


Exrcise 06 : Harl filter

switch문의 경우 따로 break를 걸어주지 않으면 switch문을 빠져나갈때까지 쭉 진행함에 유의