흔하게 할 수 있는 실수들 중에서

매개변수 순서를 잘 못 입력한 경우가 생길 수 있다.


class Data

{

public:

Date( int Month, int Day, int Year );

}

Date( 3, 10, 1999 ) ; 라도 제대로 기입 한다면 문제가 없겠지만

입력중 오타 라던지, 여러 사람이 사용 할 경우 순서가 헤깔리는 경우가 생 길 수 있다.

이럴때 명시적으로 각자를 구분하는 간단한 랩퍼(wrapper)타입을 만들고 이 타입을

Date 생성자 안에 둘 수 있다.

struct Day{                                struct Month{                        struct Year{

explcit Day( int d )                    explcit Month( int m )            explcit Year( int y )

: val( d ) {}                              : val( m ) {}                         : val( y ) {}

int val;                                     int val;                                 int val;

};                                             };                                        };

class Date{

public:

Date( const Month& m, const Day& d, const Year& y );

};

Date d(30, 3, 1995);                                      // error

Date d( Day(30), Month(3), Year(1995) );        // error

Date d( Month(3), Day(30), Year(1995) );        // Ok

이렇게 명시적으로 사용 하면 실수를 줄일 수 있다.

사용자의 실수를 방지하는 방법으로 새로운 타입만들기, 타입에 대한 연산을 제어하기,

객체의 값에 대한 제약걸기, 자원 관리 작업을 사용자 책음으로 놓지 않기가 있다.