2011-08-05 1 views
0
class Date 
{ 
    Date(int day, int month, int year) {  } 
} 
int main() 
{ 
    Date d = Date(100, 2, 1990); 
} 

여기에 전달 된 value (100)가 올바르지 않습니다. 제 질문은 생성자에서 'day'매개 변수를 검사하여 객체 생성을 방지하는 방법입니다. 예외 처리가 허용되지 않음에 유의하십시오.예외 처리가 허용되지 않으면 전달 된 매개 변수가 잘못 발견되면 클래스의 객체 생성을 어떻게 중지 할 수 있습니까?

+3

예외 처리가 허용되지 않는 이유는 무엇입니까? 이런 일을하는 가장 좋은 방법 인 것 같습니다 ... –

+0

@thomson_matt : 예외가 허용되지 않는 이유가 중요합니까? 그들이없는 플랫폼이 있습니다. 추론은 그의 질문에 답하는 것과는 관련이 없다. 그래, 그거 안됐다.하지만 그는 빈곤 한 환경을 어떻게 다룰지를 묻고있다. –

답변

2

eCos에서 C++ 프로젝트를 개발하고 컴파일러에서 지원하는 C++ 예외가없는 소프트웨어 엔게너와 이야기를 나누었습니다. 결과적으로 생성자에서 throw 예외를 사용하지 않았습니다. 그들은 접근

Date::Date() 
: 
initialized_ (false) 
{} 

같은 간단한 생성자를 사용하는 것이었다 다음 init 기능은 항상 사용 :

bool Date::init(int day, int month, int year) 
{ 
    // return false if there is an error while initializing the object 
    // return true if there is no error 
    initialized_ = true; 

} 

그들은 항상 init() 기능의 결과를 확인했습니다.

+0

괜찮아 보이지만 클래스 멤버에게 기본값을 할당 할 수 있습니까? like initialized_ (false) – sukumar

+0

http://ideone.com/AVosf –

3

RAII와 같은 최신 C++ 프로그래밍 기술에 대한 논점 중 하나는 예외가 없으면 사용할 수 없다는 것입니다. 예외는 생성자의 실패를 알리는 유일한 방법이므로 예외입니다. 그리고 그것은 절대적으로 사실입니다.

예외가 허용되지 않는 환경을 처리하는 유일한 방법은 생성자에서 초기화를 제거하는 것입니다. 멤버 함수 등에서 그것을하십시오.

예외가없는 환경은 사실이 아닙니다. C++. C-with-class와 같은 방식으로 치료해야합니다.

관련 문제