Home CPP Module 05 : 예외 처리
Post
Cancel

CPP Module 05 : 예외 처리

Ex00

주요 개념

예외처리

  • 개념
    • 예외 상황을 처리할 수 있도록 코드의 흐름을 바꾸는 것.
  • 특성
    • exception 헤더에 있는 std::exception 클래스를 상속받아서 what()함수를 overriding(재정의)한다.
  • 구성 요소
    • try
      • 예외 발생 가능성이 있는 코드 블록
    • throw
      • 발생한 오류에 대한 정보를 전달한다.
    • catch
      • 일치하는 예외에 대한 처리를 하는 블록

Q&A

  • _name에 std::string& 타입을 할당해도 깊은 복사가 되는 이유?
    • std::string= 연산자가 깊은 복사를 수행하기 때문이다.
  • 생성자에서 초기화 리스트로 여러 변수 초기화 시 에러 발생

    Untitled

    Untitled

    • 클래스에서 변수가 선언된 순서와 달라서 발생한 문제

Ex02

주요 개념

  • 파일 스트림
  • 랜덤 함수
    • srand(time(NULL))
      • time(NULL) : 현재 시간을 리턴
      • srand : 랜덤 수 생성기를 초기화함.
    • rand() % 2
      • rand() : 랜덤한 수를 생성함.

Q&A

  • 기반 클래스의 할당 연산자를 재사용하는 경우 유의사항
    • dynamic_cast는 필요없다.
      • 기반 클래스의 연산자를 호출하는 것과 관계없이 this는 현재 객체를 가리키는 포인터이기 때문이다.
    • 항상 기반 연산자 호출→파생 변수 복사의 순서로 이루어져야 한다.
      • 반대의 순서도 결과는 동일하지만 undefined behavior의 가능성이 있다.
    • 파생 클래스만 갖는 변수를 복사하지 않는 실수 주의 (slicing)

Ex03

주요 개념

과제 내용

  • Intern
    • form을 생성하는 역할만 하는 클래스
    • makeForm() : AForm 객체를 생성해서 포인터 형태로 리턴하는 함수

구현 과정

  • 함수 포인터 배열에 세 개의 form의 객체를 리턴하는 함수를 저장
  • if문을 돌면서 이름이 인자로 들어온 form과 일치하는지를 확인 후 함수 호출
  • 일치하는 이름이 없다면 exception throw

Q&A

  • runtime_error, length_error, out_of_range 등과 같이 exception의 종류를 구분하는 이유?
    • 위의 예외들은 일반적으로 통용되는 예외들이다. 따라서 개발자들에게 문제 상황을 잘 인식시켜줄 수 있다.

Ref.

This post is licensed under CC BY 4.0 by the author.

CPP Module 04 : 다형성, 추상 클래스

CPP Module 06 : 타입 변환