Перегрузка конструктора, Передаются одинаковые типы, но разные по сути значения |
Здравствуйте, гость ( Вход | Регистрация )
Перегрузка конструктора, Передаются одинаковые типы, но разные по сути значения |
QMainWindow |
16.3.2012, 9:53
Сообщение
#1
|
Участник Группа: Участник Сообщений: 198 Регистрация: 1.8.2010 Пользователь №: 1922 Спасибо сказали: 0 раз(а) Репутация: 0 |
Привет всем!
Столкнулся с такой проблемой: есть два конструктора класса Видно, что в обоих передаваемые типы одинаковы, но по сути это совершенно разные переменные. Компилятор не пожет перегрузить мой конструктор. Как обычно выходят из подобных ситуаций? Добавить какие-то "отличительные" признаки не могу, т.к. они попросту не нужны.
|
|
|
ilyabvt |
16.3.2012, 10:28
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
Цитата Как обычно выходят из подобных ситуаций? Меняют объявления конструкторов. Иначе никак. Цитата Компилятор не пожет перегрузить мой конструктор. Я его прекрасно понимаю. Вот объявление переменной:
Угадайте какой конструктор я использовал? |
|
|
Алексей1153 |
16.3.2012, 10:35
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
QMainWindow |
16.3.2012, 11:19
Сообщение
#4
|
Участник Группа: Участник Сообщений: 198 Регистрация: 1.8.2010 Пользователь №: 1922 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ясно. Или QPaintDevice *paintDevice помять местами в одном...)
|
|
|
Алексей1153 |
16.3.2012, 11:28
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
QMainWindow, лучше сразу правильно делать )))
|
|
|
BRE |
16.3.2012, 14:00
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Алексей1153 |
16.3.2012, 14:15
Сообщение
#7
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
BRE, апи тут ни при чём. Это во-первых. Во вторых, гораздо быстрее передать один указатель. В-третьих - удобнее, читабельнее и проще модифицировать, когда понадобится добавить ещё переменную
а в данном случае это вообще единственный выход А вызов делать не сложнее: было F(x,y,z) стало F(s(x,y,z)) Сообщение отредактировал Алексей1153 - 16.3.2012, 14:17 |
|
|
Влад |
16.3.2012, 14:33
Сообщение
#8
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Алексей1153, только вот тут лучше бы иначе:
или использовать делегирующий конструктор, если компилятор поддерживает C++11:
|
|
|
Алексей1153 |
16.3.2012, 14:50
Сообщение
#9
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Влад, да, поленился )
а вот это Цитата s_placements() : s_placements(0,0,0,0) не приветствую! Сообщение отредактировал Алексей1153 - 16.3.2012, 16:16 |
|
|
BRE |
16.3.2012, 17:41
Сообщение
#10
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
апи тут ни при чём. Это во-первых. А что причем? Да, язык C++ не может иметь разные конструкторы с одинаковыми сигнатурами, но это же совсем не повод для таких решений. Во вторых, гораздо быстрее передать один указатель. А время заполнения структуры ты считаешь? А почему? В-третьих - удобнее, читабельнее и проще модифицировать, когда понадобится добавить ещё переменную Читабелнее? Тоже спорно.
Читающему код придется разбираться, а что это за s такой? Объект это или функция, что-то возвращающая. По мне, так вводить отдельную сущность на каждый чих это перебор. Если эту структуру можно выделить в отдельный класс - выделяй, но делать это для передачи параметров... это в лучших традициях "специалистов" микрософта. Сообщение отредактировал BRE - 16.3.2012, 19:02 |
|
|
Текстовая версия | Сейчас: 29.4.2024, 0:12 |