cpp 05

jiwoo·2022년 12월 22일
0

cpp

목록 보기
6/9

CPP 05

생성일: 2022년 12월 8일 오후 10:08
최종 편집 일시: 2022년 12월 11일 오전 1:00
태그: cpp
cpp notion
# CPP MODULE 05

  • Repetition and Exceptions
  • 반복 및 예외처리

ex00 Mommy, when I grow up, I want to be a bureaucrat!

나는 커서 공무원이 될꺼야!

예외처리 익히기 try - catch 문

  • Please note that exception classes don’t have to be designed in Orthodox Canonical Form. But every other class has to.
  • 예외처리
    • C 언어에서는 예외가 발생했을 때, 다른 값을 리턴하는 것으로 예외를 처리하였지만, C++ 에서는 예외가 발생하였다는 사실을 명시적으로 나타낼 수 있습니다. 바로 throw문을 사용하면 됩니다.
    • try ~ catch문
      • if/else 문으로 예외처리하는 것과 비교했을 때

        • return 값으로 에러를 구분하던 것을 하지 않고 명시적으로 throw를 사용 할 수 있다.
        • if 문의 뒤는 계속 실행되겠지만, throw 뒤의 문장은 실행하지 않고 catch 문으로 넘어간다.
      • 사용시 주의사항
        - stack 메모리에 올라간 지역변수 등은 알아서 해제 해주지만, heap 영역의 메모리들은 우리가 직접 신경써서 메모리 해제 해주어야 한다.
        - throw 에서 던진 변수와 알맞는 catch 문이 없어도 컴파일이 될 수 있으며, 실행시 에러가 나니 주의 해주어야 한다. default catch를 쓰면 해결 할 수 있다.
        - catch가 받는 변수가 부모클래스와 자식클래스로 섞여 있다면, 자식클래스가 먼저 위에서 catch 하고 부모클래스가 나와야 한다. 부모클래스 = 자식클래스; 부모클래스에 자식클래스가 담아질 수 있기 때문이다.

        try
        {
        	/* do some stuff with bureaucrats */
        }
        catch (std::exception & e)
        {
        	/* handle exception */
        }
        catch (...) // else catch!
        {
        	/* handle exception */
        }
    • 기본class 내부에 std::exception 을 상속받는 exception 클래스 만들기
      • class GradeTooHighException : public std::exception{}
      • class GradeTooLowException : public std::exception{}
      • what() 함수
        • virtual const char* what() const throw();
        • 위와 같이 exception 클래스 안에 what() 멤버 함수가 가상함수로 선언 되어 있는 것을 볼 수있다. 자식클래스가 오버라이딩하기를 기대한다는 뜻이다.
        • 그렇다면 필요에 맞게 오버라이딩하여 쓰자 !
        • 주의점 : 반환형이 string이 아닌 char * 이다.!
      • https://cplusplus.com/reference/exception/exception/what/
    • https://modoocode.com/230

ex01 Form up, maggots!

Form 클래스 추가, class 멤버 함수 안에서 try-catch

  • 헤더 독립성 지키기
    • 헤더에는 서로의 헤더를 include 하지 않는 대신 상단에 임시로 필요한 class를 선언해 두었다.
    • 소스코드, cpp파일에 필요한 헤더를 include 한다.
    • https://gpgstudy.com/forum/viewtopic.php?t=23724. (?)

ex02 No, you need form 28B, not 28C...

Form 클래스를 추상 클래스 AForm 으로 만들고, 상세클래스 만들기

  • 추상클래스
    • 순수 가상함수를 하나라도 포함하고 있는 클래스
    • 때문에 추상클래스의 객체는 생성 불가능 하다.
    • 가상 소멸자 사용
      • 기본 클래스포인터에 파생클래스의 주소가 저장되었을 때, 소멸자 호출시 가상 소멸자가 아니라면 기본클래스의 소멸자만 실행된다.
      • 가상 virtual 선언시, 가상함수테이블이 만들어지고 어떤 가상함수를 호출해야하는지 결정하는데 사용된다. (선언이 되어 있지 않다면 포인터의 형태를 보고 소멸자를 불러오는 듯 하다)
      • https://junstar92.tistory.com/176
  • 상세 클래스
    • 상속 받은 추상클래스의 모든 순수 가상함수를 정의한 클래스
  • ASCII trees
    • 							 ,@@@@@@@,
             ,,,.   ,@@@@@@/@@,  .oo8888o.
          ,&%%&%&&%,@@@@@/@@@@@@,8888\88/8o
         ,%&\%&&%&&%,@@@\@@@/@@@88\88888/88'
         %&&%&%&/%&&%@@\@@/ /@@@88888\88888'
         %&&%/ %&%%&&@@\ V /@@' `88\8 `/88'
         `&%\ ` /%&'    |.|        \ '|8'
             |o|        | |         | |
             |.|        | |         | |
      jgs \\/ ._\//_/__/  ,\_//__\\/.  \_//__/_
  • 50 % 확률

ex03 At least this beats coffee-making

intern 클래스 만들기

  • 함수 포인터 써서 문자열 검사 및 매치

0개의 댓글