С++ для начинающих



         

Конструктор как конвертер - часть 2


Компилятор неявно использует конструктор с единственным параметром для преобразования его типа в тип класса, к которому принадлежит конструктор. Однако иногда удобнее, чтобы конструктор Number(const SmallInt&) можно было вызывать только для инициализации объекта типа Number значением типа SmallInt, но ни в коем случае не для выполнения неявных преобразований. Чтобы избежать такого употребления конструктора, объявим его явным (explicit):

class Number {

public:

   // никогда не использовать для неявных преобразований

   explicit Number( const SmallInt & );

   // ...

};

Компилятор никогда не применяет явные конструкторы для выполнения неявных преобразований типов:

extern void func( Number );

SmallInt si(87);

int main()

{  // ошибка: не существует неявного преобразования из SmallInt в Number

   func( si );

   // ...

}

Однако такой конструктор все же можно использовать для преобразования типов, если оно запрошено явно в форме оператора приведения типа:

SmallInt si(87);

int main()

{  // ошибка: не существует неявного преобразования из SmallInt в Number

   func( si );

   func( Number( si ) );  // правильно: приведение типа

   func( static_cast< Number >( si ) );  // правильно: приведение типа

}




Содержание  Назад  Вперед