[42Seoul] - CPP Module00

Joey·2022년 11월 2일
1

42 SEOUL

목록 보기
7/20



1.무엇을 하는 과제인가?

: CPP의 기본적인 사용법을 배우는 과제이다. 기존에 C로 되어있는 과제를 하면서 해왔던 관성들을 버리게 만들고 싶어하는 과제라고 생각했다. 총 3문제 ex00,ex01,ex02로 이루어져 있고 이들 전부 "CPP란 이런 느낌이야"라고 말하는 느낌이었다.




2.과제를 하면서 참고 했던 곳들

1)class vs 구조체

: 첫 CPP과제라서 그런지 Class와 구조체의 차이가 많이 궁금했다. 의외의 부분들이 있어서 놀랬으나 간단히 생각해보면
Class : heap 영역에 생성, 구조체 : stack 영역에 생성되며, 메모리 절약은 클래스, 속도는 구조체라고 생각을 하면 편하다. 아래의 링크에 담겨있다.

링크 : https://funfunhanblog.tistory.com/96

2)CPP Reference

: 함수들이나 클래스들이 어떻게 쓰이는지 나와있으며, 연도별로 어떤게 추가됐는지 알수가 있다. 이 사이트가 굉장히 중요한게 과제가 Cpp98 버전을 기준으로 해야되기 때문에 쓰고 싶은 함수가 있으면 계속 적으로 체크를 해야한다.

링크 : https://en.cppreference.com/w/

3)Cplusplus

: 사실 그렇게 많이 참고를 하진 않았으나 위의 사이트 못지 않게 유명한 곳이라서 이곳에서도 검색을 해보면 좋다. 다양한 내용들에 대해서 알 수가 있다.

링크 : https://cplusplus.com/





3.과제를 하면서 공부했던 것들

1)ex00

: string을 처음 써보고, string에 담겨있는 함수들에 대해서 알수가 있었다.(libft를 가져다가 쓰는 것을 이제는 버리는 단계)
: 여기서부터 컴파일을 할때 굉장히 주의를 해야한다. 여기서 셋팅만 잘해두고 가면 뒤는 그다지 힘들지 않았다.

  • compile은 c++로
  • flag는 -Wall -Wextra -Werror -std=c++98
  • Class는 UpperCamelCase format으로한다.
  • Class명은 위에 정한 이름으로 한다.
  • 노미넷은 없다.
  • 참고로 클래스내에 변수명에 대한 규칙은 없다. 하지만 보통은 private은 '_sortNumberCase' 이런식으로 underbar와 처음 소문자 + 대문자 형태로 나아간다.(이것에는 규칙이 없지만 보통 이런식으로 많이 쓰길래 나도 차용하였다.)
    public은 보통 함수명이 많이 들어갔는데 이곳에도 '__'만 빼고 위와 같은 규칙으로 하였다.


2)ex01

: cpp에서 입력을 할 때 쓸수 있는 함수와 이 함수들의 예외처리를 어떻게 하는지에 대해서 알게 되었다.
: 어떤 식으로 iostream이 출력을 하는지 알게 되었다. 결론적으로 버퍼에 담고 그것을 출력하는 식으로 하게 되는데, 버퍼에 이상한게 담겨있으면 당연히 오류가 난다.

[cin vs get vs getline]

  • cin : 공백이나 개행입력시 그 이전까지만 받아들인다. 문자, 문자열 둘다 가능
  • get : 공백도 받아들임, 한 글자씩 받아들임. 문자만 됨.
  • getline : 공백이나 개행도 입력 받음. 문자열 단위로 입력을 받음

[ios클래스에서는 스트림의 상태를 관리를 한다.]
  • goodbit : 스트림에 입출력 작업이 가능할 때
  • badbit : 스트림에 복구 불가능한 오류 발생시
  • failbit : 스트림에 복구 가능한 오류 발생시
  • eofbit : 입력 작업시에 [EOF] 도달시에

평소 같으면 별일이 없겠지만 맞지 않는 값을 넣으면 오류가 발생되고 failbit가 켜진다. cin을 썼다면 cin.fail() 이런식으로 failbit가 켜진 것을 확인을 해볼 수 있다. failbit가 켜지면 cin.fail()은 true를 반환한다.

타입에 맞지 않는 값을 넣어서 오류가 발생되면 failbit가 생성되는 것은 그렇다 쳐도 입력값을 받지 않고 리턴해버린다. 문제는 리턴해버리면서 버퍼에 남아 있는 문자열에는 손을 대지가 않는다. 그래서 다음에 버퍼에 있는 문자를 또 읽고, 또 읽고 계속적으로 문제를 일으켜 버린다.

링크(모두의코드) : https://modoocode.com/213

3)ex02

: "CPP의 Class가 이런식으로 쓸 수 있구나" 하는 것을 배우게 되었다. 굉장히 복잡해 보이지만 문제 자체는 풀다보면 할 수는 있다. "앞으로 이런것을 할거야" 정도만 확인하고 끝내면 된다. Module08까지 한 지금은 이해가 많이되서 다행이지만 당시에는 정말 무슨 구조인지도 파악이 힘들었다.





4.회고

1)CPP와의 만남

: 사실 언젠가 CPP를 해본 적은 있지만, 기억도 안날 정도로 오래 되었다. 그때는 몰랐던 것을 배우는 것 같아서 좋았다. 사실 금방할 줄 알았는데 이 과제를 하기까지 생각보다 시간이 많이 들었다. ex01 문제를 너무 쉽게 생각했는데 버퍼에 남는 값을 처리하는 것이 이 과제의 핵심이라고 생각한다. 그 과정을 꼭 배워야 한다고 생각한다.

profile
세상을 이롭게 하는 프로그램 만들기

0개의 댓글