Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 1
#1

explicit конструктор и перегрузки в классе - C++

03.09.2013, 18:07. Просмотров 546. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Test {
public:
    Test ()                    { printf("Simple constructor\n"); }
    Test (long)                { printf("Long\n"); }
    explicit Test (int)        { printf("Integer\n"); }
    Test (const Test&)            { printf("Copy operation\n"); }
    Test  &operator=(const Test&) { printf("= Operation\n"); return *this; }
};
 
void printt(int n)
{
   cout << n << ": ";
}
int main()
{
   const int i = 0;
   printt(1); Test t1();
   printt(2); Test  t2 = i;
   printt(3); Test  t3(i);
   printt(4); Test  t4 = Test(i);
   printt(5); Test  t5 = (Test) i;
   printt(6); Test  t6 = static_cast<Test>(i);
   return 0;
}
что получаем:

1: 2: Long
3: Integer
4: Integer
5: Integer
6: Integer


почему не

1: Integer
2: Integer
3: Integer
4: Integer
5: Integer
6: Integer
в виду того же explicit'a
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2013, 18:07     explicit конструктор и перегрузки в классе
Посмотрите здесь:

конструктор в классе C++
Целевой explicit конструктор C++
Конструктор и деструктор в классе C++
Ошибка перегрузки + в классе C++
По поводу потока и перегрузки оператора вставки в классе C++
C++ Конструктор в производном классе
C++ При потсроении пишет что конструктор либо недоступен либо объявлен как explicit
C++ Конструктор копирования в шаблонном классе
Конструктор копирования в классе с вектором C++
Конструктор копирования в классе матрицы C++
C++ Конструктор в классе
C++ Создать конструктор в классе

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.09.2013, 18:10     explicit конструктор и перегрузки в классе #2
Цитата Сообщение от Raali Посмотреть сообщение
почему не
1-е это прототип функции
2-е из-за explicit у конструктора с принимающего int
Croessmah
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,937
Записей в блоге: 2
Завершенные тесты: 1
03.09.2013, 18:12     explicit конструктор и перегрузки в классе #3
C++
1
Test t1();
Это функция, а не создание объекта. Уберите скобочки

Добавлено через 1 минуту
Цитата Сообщение от Raali Посмотреть сообщение
Test t2 = i;
Это не явное приведение, поэтому срабатывает конструктор с long
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 1
03.09.2013, 18:12  [ТС]     explicit конструктор и перегрузки в классе #4
а второе что то не понял, то есть если приведение не явное то explicit не учитывается?
Croessmah
Модератор
Эксперт CЭксперт С++
12877 / 7263 / 810
Регистрация: 27.09.2012
Сообщений: 17,937
Записей в блоге: 2
Завершенные тесты: 1
03.09.2013, 18:32     explicit конструктор и перегрузки в классе #5
Цитата Сообщение от Raali Посмотреть сообщение
а второе что то не понял, то есть если приведение не явное то explicit не учитывается?
В общем гуглите в сторону direct-initialization и copy-initialization, чтобы было понятнее что к чему
Yandex
Объявления
03.09.2013, 18:32     explicit конструктор и перегрузки в классе
Ответ Создать тему
Опции темы

Текущее время: 20:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru