: CPP의 기본적인 사용법을 배우는 과제이다. 기존에 C로 되어있는 과제를 하면서 해왔던 관성들을 버리게 만들고 싶어하는 과제라고 생각했다. 총 3문제 ex00,ex01,ex02로 이루어져 있고 이들 전부 "CPP란 이런 느낌이야"라고 말하는 느낌이었다.
: 첫 CPP과제라서 그런지 Class와 구조체의 차이가 많이 궁금했다. 의외의 부분들이 있어서 놀랬으나 간단히 생각해보면
Class : heap 영역에 생성, 구조체 : stack 영역에 생성되며, 메모리 절약은 클래스, 속도는 구조체라고 생각을 하면 편하다. 아래의 링크에 담겨있다.
링크 : https://funfunhanblog.tistory.com/96
: 함수들이나 클래스들이 어떻게 쓰이는지 나와있으며, 연도별로 어떤게 추가됐는지 알수가 있다. 이 사이트가 굉장히 중요한게 과제가 Cpp98 버전을 기준으로 해야되기 때문에 쓰고 싶은 함수가 있으면 계속 적으로 체크를 해야한다.
링크 : https://en.cppreference.com/w/
: 사실 그렇게 많이 참고를 하진 않았으나 위의 사이트 못지 않게 유명한 곳이라서 이곳에서도 검색을 해보면 좋다. 다양한 내용들에 대해서 알 수가 있다.
: string을 처음 써보고, string에 담겨있는 함수들에 대해서 알수가 있었다.(libft를 가져다가 쓰는 것을 이제는 버리는 단계)
: 여기서부터 컴파일을 할때 굉장히 주의를 해야한다. 여기서 셋팅만 잘해두고 가면 뒤는 그다지 힘들지 않았다.
: cpp에서 입력을 할 때 쓸수 있는 함수와 이 함수들의 예외처리를 어떻게 하는지에 대해서 알게 되었다.
: 어떤 식으로 iostream이 출력을 하는지 알게 되었다. 결론적으로 버퍼에 담고 그것을 출력하는 식으로 하게 되는데, 버퍼에 이상한게 담겨있으면 당연히 오류가 난다.
[cin vs get vs getline]
평소 같으면 별일이 없겠지만 맞지 않는 값을 넣으면 오류가 발생되고 failbit가 켜진다. cin을 썼다면 cin.fail() 이런식으로 failbit가 켜진 것을 확인을 해볼 수 있다. failbit가 켜지면 cin.fail()은 true를 반환한다.
타입에 맞지 않는 값을 넣어서 오류가 발생되면 failbit가 생성되는 것은 그렇다 쳐도 입력값을 받지 않고 리턴해버린다. 문제는 리턴해버리면서 버퍼에 남아 있는 문자열에는 손을 대지가 않는다. 그래서 다음에 버퍼에 있는 문자를 또 읽고, 또 읽고 계속적으로 문제를 일으켜 버린다.
링크(모두의코드) : https://modoocode.com/213
: "CPP의 Class가 이런식으로 쓸 수 있구나" 하는 것을 배우게 되었다. 굉장히 복잡해 보이지만 문제 자체는 풀다보면 할 수는 있다. "앞으로 이런것을 할거야" 정도만 확인하고 끝내면 된다. Module08까지 한 지금은 이해가 많이되서 다행이지만 당시에는 정말 무슨 구조인지도 파악이 힘들었다.
: 사실 언젠가 CPP를 해본 적은 있지만, 기억도 안날 정도로 오래 되었다. 그때는 몰랐던 것을 배우는 것 같아서 좋았다. 사실 금방할 줄 알았는데 이 과제를 하기까지 생각보다 시간이 많이 들었다. ex01 문제를 너무 쉽게 생각했는데 버퍼에 남는 값을 처리하는 것이 이 과제의 핵심이라고 생각한다. 그 과정을 꼭 배워야 한다고 생각한다.