Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

explicit конструктор

7.0K
09 марта 2008 года
pink master
79 / / 21.10.2006
В классе существует explicit конструктор, но я все равно могу создать экземпляр, передавая конструктору другой тип.
Код:
...
class A
{
    double var;
public:
    explicit A(double var)
    {
        this->var = var;
    }
   
};
...
A MyObj('a');
...



Подскажите пожалуйста, почему это возможно.

P.S. Компилятор MSVS.NET 2003, если это важно.
3
10 марта 2008 года
Green
4.8K / / 20.01.2000
Ты неверно трактуешь explicit.
Explicit запрещает неявный вызов конструктора для преобразования типа:
 
Код:
A MyObj('a'); // здесь все ОК
A MyObj = 'a'; // а вот так при explicit нельзя
7.0K
10 марта 2008 года
pink master
79 / / 21.10.2006
но это же не хорошо, что конструктор double может фактически принять char и даже предупреждения не выскакивает. Есть ли способ это запретить?
260
10 марта 2008 года
Ramon
1.1K / / 16.08.2003
Код:
class A
{
public:
    explicit A(double)
    {
        ...
    }

private:
    A(char);
};
7.0K
10 марта 2008 года
pink master
79 / / 21.10.2006
о спасибо=)
только этот способ означает что будут не разрешены все конструкторы, прописанные в private. Предусмотреть все возможные варианты не так уж легко. А есть ли способ наоборот, то есть не то что указано запрещено, а то что явно не указано запрещено.

извиняюсь за такие вопросы, просто хочется разобраться до конца и потом не спотыкаться.
3
10 марта 2008 года
Green
4.8K / / 20.01.2000
Код:
class A
{
private:
    template<typename T> A(T);

public:
    explicit A(double)
    {
        ...
    }
};
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог