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

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

Войти
Регистрация
Восстановить пароль
 
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
#1

Конструктор по умолчанию - C++

11.07.2012, 20:21. Просмотров 1040. Ответов 11
Метки нет (Все метки)

Здравствуйте, есть такой код:
C++ (Qt)
1
2
    explicit RFileDownloader(QObject *parent = 0);
    explicit RFileDownloader(const QUrl &url = QUrl(), QObject *parent = 0);
Как вы видите, если аргументы конструктора не заданы, но и первый и второй подходят.
Как можно указать компилятору, что в таком случае нужно, например, выбирать 1 конструктор?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2012, 20:21     Конструктор по умолчанию
Посмотрите здесь:

Конструктор по умолчанию - C++
У меня получается создавать конструктор по умолчанию если в хедере эти значения указаны: class Unit { protected: string name; ...

Конструктор по умолчанию - C++
Всем привет! Если в классе вообще нет конструктора, чем будут инициализироваться члены класса? И в чем отличие объект() и объект...

Конструктор по умолчанию - C++
Я то ли динамику недопоняла, то ли классы, то ли конструктор... И теперь совсем запуталась. Что нужно написать в конструкторе без...

Конструктор по умолчанию - C++
Здраститя. #include <iostream> using namespace std; class random { public: random(int b){a=b;} ~random(){} int...

Конструктор по умолчанию - C++
как использовать конструктор по умолчанию в конструкторе с параметром? К по умолчанию заполняет массив заранее определёнными символами, а...

Конструктор по умолчанию - C++
Доброе утро! При попытке доступа к данным-элементам объекта, созданного конструктором по умолчанию, программа загибается. Возникло...

Конструктор по умолчанию - C++
Показывает ошибку : 1 IntelliSense: для класса "tovar" не существует конструктор по умолчанию Подскажите пожалуйста как сделать ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.07.2012, 20:28     Конструктор по умолчанию #2
1-й конструктор излишен и его нужно убрать
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.07.2012, 20:30     Конструктор по умолчанию #3
Цитата Сообщение от hepr Посмотреть сообщение
Здравствуйте, есть такой код:
C++ (Qt)
1
2
    explicit RFileDownloader(QObject *parent = 0);
    explicit RFileDownloader(const QUrl &url = QUrl(), QObject *parent = 0);
Как вы видите, если аргументы конструктора не заданы, но и первый и второй подходят.
Как можно указать компилятору, что в таком случае нужно, например, выбирать 1 конструктор?
Компилятор такое не пропустит. Конструктор по умолчанию может быть только один.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.07.2012, 20:36     Конструктор по умолчанию #4
Первый убрать, а во втором поменять аргументы местами. Тогда будет именно то, чего хочешь.
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
11.07.2012, 23:30  [ТС]     Конструктор по умолчанию #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Первый убрать, а во втором поменять аргументы местами. Тогда будет именно то, чего хочешь.
Было бы все так просто, что например если пользователь хочет указать родителя(QObject), но не указывать QUrl
Компилятор такое не пропустит. Конструктор по умолчанию может быть только один.
Пропускают, причем легко:
GCC даже не пикнул.
MSVC показал предупреждение.
1-й конструктор излишен и его нужно убрать
А что если пользователь хочет указать QObject, но не QUrl?

Добавлено через 2 часа 47 минут
А если обозначить этот вариант:
C++ (Qt)
1
explicit RFileDownloader();
То сработает?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2012, 01:58     Конструктор по умолчанию #6
Цитата Сообщение от hepr Посмотреть сообщение
Пропускают, причем легко:
И какой тогда конструктор будет использоваться при создании объекта?
Пропускают, пока объект не объявлен. А потом: error - неоднозначный вызов перегруженной функции.
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
12.07.2012, 02:08     Конструктор по умолчанию #7
Цитата Сообщение от hepr Посмотреть сообщение
Как можно указать компилятору, что в таком случае нужно, например, выбирать 1 конструктор?
Так не получится. Зато можно сделать чтобы выбирался второй.
C++
1
2
explicit RFileDownloader(QObject *parent);
explicit RFileDownloader(const QUrl &url = QUrl(), QObject *parent = 0);
Если указан только parent, то будет использоваться первый, во всех очтальных случаях — второй.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.07.2012, 06:36     Конструктор по умолчанию #8
Цитата Сообщение от hepr Посмотреть сообщение
например если пользователь хочет указать родителя(QObject), но не указывать QUrl
Цитата Сообщение от hepr Посмотреть сообщение
во втором поменять аргументы местами.
Так понятнее?
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
12.07.2012, 13:33  [ТС]     Конструктор по умолчанию #9
Пропускают, пока объект не объявлен. А потом: error - неоднозначный вызов перегруженной функции.
Про это я и не спорю, я говорю, что на само подобное объявление компиляторы не жалуются.

Так понятнее?
А так не будет работать обратное: если пользователь хочет указать QUrl но не QObject

Цитата Сообщение от grizlik78 Посмотреть сообщение
Так не получится. Зато можно сделать чтобы выбирался второй.
C++
1
2
explicit RFileDownloader(QObject *parent);
explicit RFileDownloader(const QUrl &url = QUrl(), QObject *parent = 0);
Если указан только parent, то будет использоваться первый, во всех очтальных случаях — второй.
Спасибо, это то что надо.
Всем большое спасибо за помощь!
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.07.2012, 13:55     Конструктор по умолчанию #10
Цитата Сообщение от hepr Посмотреть сообщение
это то что надо
Без конструктора по умолчанию ты не сможешь создавать объекты в массиве и использовать стандартные алгоритмы. Т.е., загрузить сразу два файла из сети ты уже не сможешь.(
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
12.07.2012, 15:39  [ТС]     Конструктор по умолчанию #11
Цитата Сообщение от Deviaphan Посмотреть сообщение
Без конструктора по умолчанию ты не сможешь создавать объекты в массиве и использовать стандартные алгоритмы. Т.е., загрузить сразу два файла из сети ты уже не сможешь.(
Коструктор по умолчанию будет 2 конструктор, то бишь этот:
C++ (Qt)
1
explicit RFileDownloader(const QUrl &url = QUrl(), QObject *parent = 0);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 15:58     Конструктор по умолчанию
Еще ссылки по теме:

Конструктор с параметром по умолчанию - C++
Здравствуйте, знаю, что здесь про конструкторы много говорили, но я не смог решить свою проблему поэтому обращаюсь (хотя мне кажется что...

Конструктор копий по умолчанию. - C++
Почему, когда в vc++ vdfsadsad Добавлено через 46 секунд Почему если идёшь по коду с заходом в функцию не отображается вызов...

Перемещающий конструктор по умолчанию - C++
Есть класс содержащий в себе std::unique_ptr. Так как unique_ptr не умеет копироваться, копирующего конструктора у класса быть не может. Но...

Перемещающий конструктор по умолчанию - C++
Генерируется ли конструктор перемещения для простых структур? Например в таком вариант обмен объектами при сортировке будет производится...

Конструктор с параметрами по умолчанию - C++
пытаюсь создать класс с параметрами по умолчанию(я да, надеюсь, что я не путаюсь в терминах) #include <iostream> class some { ...


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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.07.2012, 15:58     Конструктор по умолчанию #12
Упс. Пора поспать разок.
Yandex
Объявления
12.07.2012, 15:58     Конструктор по умолчанию
Ответ Создать тему
Опции темы

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