42 Seoul: CPP Module 01

Chaewon Kang·2021년 5월 17일
0

42 seoul

목록 보기
13/17

Ex00

포니 클래스를 만들자.
포니 클래스 내에 ponyOnTheHeap, ponyOnTheStack 함수를 만들자.
ponyOnTheHeap 함수는 Pony를 힙 영역에 할당하고, ponyOnTheStack 함수는 Pony를 스택 영역에 할당한다.
두 개의 함수를 통해 생성된 두 개의 포니 객체들은 함수 실행 이후에는 존재하면 안된다.

요약:
ponyOnTheHeap은 힙에 메모리를 할당하기 위해 동적할당 new, delete 키워드 사용.
ponyOnTheStack은 스택에 메모리 할당을 위해 정적할당.
Pony 클래스 내에는 문자열로 이름을 받고, 해당 이름으로 생성하고, 소멸자를 통해 메모리를 지워줌.

우리가 명확히 delete 를 지정하지 않는 한 자동으로 delete 가 되는 경우는 없다. 사실 몇 바이트 정도 밖에 되지 않을 것이지만 위와 같은 메모리들(해제되지 않은 메모리들)이 쌓이고 쌓이게 되면 메모리 누수 (Memory Leak) 이라는 문제점이 발생하게 된다. 이 문제를 해결하기 위해, 생성했던 객체가 소멸 될 때 자동으로 호출되는 함수를 소멸자(Destructor)라고 한다.

Ex01

주어진 함수 내에서 memory leak 해결하기.
단순히 delete 키워드를 써주면 되는 문제. (메모리 해제하기)

Ex02

좀비 클래스를 만들자. 이 클래스 안에는 type, name이 있어야 하고, 멤버 함수로 announce()가 있다. 형식은, <이름 (종류)> 뇌를 줘... 의 메세지를 출력하게 될 것이다.

좀비 이벤트 클래스를 만들자. 여기에는 setZombieType() 함수가 있을 거고, 이것은 객체 안에 타입을 저장한다. 그리고 Zombie* newZombie(std::string name) 함수는, 좀비를 선택된 타입에 따라 생성하고, 이름짓고, 반환한다.

randomChump 함수도 만들게 될 건데, 이건 랜덤한 이름을 가진 좀비를 생성하고, 자신이 울부짖게 만든다. 이름을 어떻게 랜덤하게 지을건지는 알아서.

main을 포함한 full program을 제출해야 하고, 새로 생성된 좀비들이 울부짖는 것 등.. 필요한 사항들을 잘 증명하세요. 생성된 좀비들은 적절한 때에 파괴되어야 하고, 적절한 방식으로 할당되어야 한다. 어떤 때는 스택에, 어떤 때는 힙이 나을 것이다. 잘 정당화 해 보세요.

요약:
우선 Zombie 클래스는 멤버변수 type, name. 멤버함수 announce.
ZombieEvent 클래스는 타입세팅하는 setZombieType, 새로운 Zombie클래스 만드는 함수, randomChump.

Ex03

위에서 만든 Zombie 클래스 재사용 해서, ZombieHorde 클래스를 만들자.
이 클래스는 정수 N을 받는 생성자를 갖게 될 거구, 생성될 때, N개의 좀비 객체들을 메모리 할당한다. 위에서 했듯이 랜덤하게 이름을 짓고, 그 이름을 저장해야 된다.
그리고 위에서 했듯이 울부짖게 될 것이다. 이 여러개의 랜덤 좀비 객체들은 한 번에 할당하고, ZombieHorde가 파괴될 때 한 번에 해제되어야 된다. 메인에서 잘 정당화 해 보세요!

Ex04

HI THIS IS BRAIN 이라는 문자열과, 이 문자열을 가리키는 포인터, 이 문자열을 참조하는 참조자를 포함한 프로그램을 만드세요. 포인터를 사용해서 출력하고, 참조자를 사용해서 출력해 보세요. 포인터/참조자 개념의 차이를 알아야 하는 문제.

Ex05

Brain 클래스를 만들고, 이 안에 있어야 한다고 생각되는 것들을 넣으세요. 일단은 identify() 함수를 가질 건데, 메모리 안에서의 Brain이 갖고 있는 주소를 반환할 거에요. (16진법 포맷으로.)

그리고 Human 클래스를 만들자. 이 클래스는 동일한 생명 주기를 가진 상수 형태의 Brain 속성을 갖게 될 것이에요. 이것 또한 identify() 함수를 갖게 될 건데, Brain 객체 안에 있는 identify() 함수를 호출하고, 그것의 결과값을 반환합니다.

주어진 main 을 컴파일 했을 때 두 개의 동일한 주소를 표시하는지 볼 거에요.

Ex06

Weapon 클래스 만드세요. 이 클래스는 type 이라는 문자열이랑, getType() 함수를 갖는데, 이건 이 문자열에 대한 상수 참조자를 가진다. 그리고 setType() 함수도 갖고요.

HumanA, HumanB 클래스는, 각각 Weapon을 가지는데, 이 인간들에 대한 이름이랑, 공격을 하는 attack 함수는 다음과 같은 메세지를 나타낼 거에요. OO가 무기를 갖고 공격한다!

crude spiked club, some other type of club 을 순서대로 사용해서 공격하도록 만드세요. 어떤 경우가 무기를 포인터로 저장하는 것이 적합할까요? 아니면 참조자? 왜요?

Ex07

파일 네임, 그리고 두 개의 문자열을 받아서, 앞의 문자열을 뒤의 문자열로 바꿔서 새로운 파일 (.replace)로 뱉어내는 프로그램을 만드세요. 최대한 에러처리 잘 하시고요!

알아야할 것들.
std::ifstream ifs 파일 읽을 때 이용하고, std::ofstream ofs 파일 출력할 때 이용.
인자로 파일 이름, 문자열 1, 2 총 세개가 들어오지 않았을 경우에 에러 처리 할 것.
open, find, replace, length, close 등의 내장함수 잘 사용하기.

profile
문학적 상상력과 기술적 가능성

0개의 댓글