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

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

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

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

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

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

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор класса не видит конструктор по умолчанию другого класса - C++
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

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

11
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.07.2012, 20:28 #2
1-й конструктор излишен и его нужно убрать
1
alsav22
5425 / 4820 / 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 конструктор?
Компилятор такое не пропустит. Конструктор по умолчанию может быть только один.
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
11.07.2012, 20:36 #4
Первый убрать, а во втором поменять аргументы местами. Тогда будет именно то, чего хочешь.
1
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();
То сработает?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2012, 01:58 #6
Цитата Сообщение от hepr Посмотреть сообщение
Пропускают, причем легко:
И какой тогда конструктор будет использоваться при создании объекта?
Пропускают, пока объект не объявлен. А потом: error - неоднозначный вызов перегруженной функции.
1
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
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, то будет использоваться первый, во всех очтальных случаях — второй.
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.07.2012, 06:36 #8
Цитата Сообщение от hepr Посмотреть сообщение
например если пользователь хочет указать родителя(QObject), но не указывать QUrl
Цитата Сообщение от hepr Посмотреть сообщение
во втором поменять аргументы местами.
Так понятнее?
1
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, то будет использоваться первый, во всех очтальных случаях — второй.
Спасибо, это то что надо.
Всем большое спасибо за помощь!
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.07.2012, 13:55 #10
Цитата Сообщение от hepr Посмотреть сообщение
это то что надо
Без конструктора по умолчанию ты не сможешь создавать объекты в массиве и использовать стандартные алгоритмы. Т.е., загрузить сразу два файла из сети ты уже не сможешь.(
0
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);
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.07.2012, 15:58 #12
Упс. Пора поспать разок.
0
12.07.2012, 15:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2012, 15:58
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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