CPP Module 01
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
이 없을 수도 있는 HumanB
는 Weapon
을 포인터형으로 선언하여 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
문을 빠져나갈때까지 쭉 진행함에 유의