Ex00
주요 개념
예외처리
- 개념
- 예외 상황을 처리할 수 있도록 코드의 흐름을 바꾸는 것.
- 특성
- exception 헤더에 있는
std::exception
클래스를 상속받아서what()
함수를 overriding(재정의)한다.
- exception 헤더에 있는
- 구성 요소
- try
- 예외 발생 가능성이 있는 코드 블록
- throw
- 발생한 오류에 대한 정보를 전달한다.
- catch
- 일치하는 예외에 대한 처리를 하는 블록
- try
Q&A
- _name에
std::string&
타입을 할당해도 깊은 복사가 되는 이유?std::string
의=
연산자가 깊은 복사를 수행하기 때문이다.
생성자에서 초기화 리스트로 여러 변수 초기화 시 에러 발생
- 클래스에서 변수가 선언된 순서와 달라서 발생한 문제
Ex02
주요 개념
- 파일 스트림
- 랜덤 함수
srand(time(NULL))
time(NULL)
: 현재 시간을 리턴srand
: 랜덤 수 생성기를 초기화함.
rand() % 2
rand()
: 랜덤한 수를 생성함.
Q&A
- 기반 클래스의 할당 연산자를 재사용하는 경우 유의사항
- dynamic_cast는 필요없다.
- 기반 클래스의 연산자를 호출하는 것과 관계없이 this는 현재 객체를 가리키는 포인터이기 때문이다.
- 항상 기반 연산자 호출→파생 변수 복사의 순서로 이루어져야 한다.
- 반대의 순서도 결과는 동일하지만 undefined behavior의 가능성이 있다.
- 파생 클래스만 갖는 변수를 복사하지 않는 실수 주의 (slicing)
- dynamic_cast는 필요없다.
Ex03
주요 개념
과제 내용
- Intern
- form을 생성하는 역할만 하는 클래스
makeForm()
: AForm 객체를 생성해서 포인터 형태로 리턴하는 함수
구현 과정
- 함수 포인터 배열에 세 개의 form의 객체를 리턴하는 함수를 저장
- if문을 돌면서 이름이 인자로 들어온 form과 일치하는지를 확인 후 함수 호출
- 일치하는 이름이 없다면 exception throw
Q&A
- runtime_error, length_error, out_of_range 등과 같이 exception의 종류를 구분하는 이유?
- 위의 예외들은 일반적으로 통용되는 예외들이다. 따라서 개발자들에게 문제 상황을 잘 인식시켜줄 수 있다.