Mommy, when I grow up, I want to be a bureaucrat!
Turn-in directory : ex00/
Files to turn in : Makefile, main.cpp, Bureaucrat.{h, hpp}, Bureaucrat.cpp
Forbidden functions : None
{
/* do some stuff with bureaucrats */
}
catch (std::exception & e)
{
/* handle exception */
}
try
throw
catch
문의 경우 가장 먼저 대입될수 있는 객체를 받는다.기반클래스 객체
, 파생클래스 객체
순으로 catch
문 작성하게 되면 기반 클래스
포인터에 연결된 파생클래스
포인터의 경우 기반 클래스
catch
문으로 들어가버리게 된다.catch
문은 파생클래스
, 기반 클래스
순으로 catch할 수있도록 작성하는것이 좋다.ex01
Form up, maggots!
Turn-in directory : ex01/
Files to turn in : Files from previous exercise + Form.{h, hpp}, Form.cpp
Forbidden functions : None
Exercise : 02
No, you need form 28B, not 28C...
Turn-in directory : ex02/
Files to turn in : Files from previous exercises +
ShrubberyCreationForm.[{h, hpp},cpp], RobotomyRequestForm.[{h, hpp},cpp],
PresidentialPardonForm.[{h, hpp},cpp]
Forbidden functions : None
At least this beats coffee-making
Turn-in directory : ex03/
Files to turn in : Files from previous exercises + Intern.{h, hpp}, Intern.cpp
Forbidden functions : None
{
Intern someRandomIntern;
Form* rrf;
rrf = someRandomIntern.makeForm("robotomy request", "Bender");
}
{"presidential pardon", new PresidentialPardonForm(target)},
{"robotomy request", new RobotomyRequestForm(target)},
{"shrubbery creation", new ShrubberyCreationForm(target)},
{"", NULL}}
컴파일 시간을 단축시키며, 헤더포함 의존성을 줄여준다.
Core.hpp
class UtilClass;
class Core {
private:
UtilClass *util;
};
Core.hpp
#include "UtilClass.h"
Core::Core() {
util = new UtilClass;
}
사용하려는 클래스를 .hpp에서 먼저 선언하고 .cpp에서 사용하려는 객체의 .hpp를 include하는 방식입니다.
전방선언을 사용하면 .hpp에는 객체의 포인터만을 사용해 합나다.
이런 제한은 문법적으로 만들어진 것이 아니라 프로그램이 실행되는 구조에 의한 것입니다.
모든 포인터는 4byte의 메모리를 필요로하므로 우선 메모리만 확보해 두면 runtime에 생성되는 개체의 주소값을 저장할 수 있게 됩니다.
포인터가 아닌 객체의 인스턴스가 사용된다면 컴파일러는 클래스의 구조를 알아야 되므로 include된 .hpp파일이 필요하게 됩니다.
전방선언을 사용해서 얻게 되는 이점은 컴파일 시간이 단축된다는 것 입니다. 위 구조에서 전방선언이 아니라 .hpp를 include했다면 UtilityClass가 수정 될 때마다 컴파일로는. hpp를 다시 분석하게 되겠죠 만약 UtilityClass가 다른 h를 포함하고 Core클래스가 또 다른 곳에서 사용하게 된다면 의존성이 증가되어 컴파일 시간은 점점 늘어나게 됩니다.
또 전방선언은 A객체가 B를 사용하고 B객체가 A를 시용하는 상호참조에서도 유용하게 사용 됩니다.
그리고 API개발 등에서 불필요한 .hpp를 포함하지 않을 수 있다는 장점이 있습니다.