|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
||||||||||||||||||||||
Инициализация полей класса при наследовании13.03.2017, 23:54. Показов 13495. Ответов 38
Метки нет (Все метки)
Всем добрый вечер.
Возникла у меня небольшая задачка, которую никак не могу решить. Имеем базовый класс с константным полем:
Пытаюсь сделать так :
Люди, скажите, пожалуйста, что ему не нравится ? И как можно проинициализировать константное поле в наследнике ? Спасибо.
1
|
||||||||||||||||||||||
| 13.03.2017, 23:54 | |
|
Ответы с готовыми решениями:
38
Инициализация полей класса Инициализация полей во время объявления класса |
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||||
| 14.03.2017, 00:01 | |||||||
|
Ничего не смущает, что в С++ у наследников нельзя создавать имена переменных как у класса родителя?!?! А теперь по делу! Родитель создается в момент вызова конструктора А, он у вас вызывается неявно до вызова инициализации переменной field которой нету в В Таблетка:
2
|
|||||||
|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
||||
| 14.03.2017, 00:12 [ТС] | ||||
![]() Всё равно не то, что хотелось бы...
0
|
||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||||||||||
| 14.03.2017, 00:22 | ||||||||||||||
|
Вот еще пример
Задайте ряд вопросов - всё разберём! Добавлено через 4 минуты
1
|
||||||||||||||
|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
|||
| 14.03.2017, 00:24 [ТС] | |||
|
0
|
|||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||
| 14.03.2017, 00:28 | |||||
|
1
|
|||||
|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
||||||
| 14.03.2017, 00:53 [ТС] | ||||||
|
Мда... Я начинаю понимать, что и ничего не понимаю...
![]() Попробую описать общую задачу. Имеем базовый класс. У него есть свой конструктор. Он вызывается раньше всех производных конструкторов - в этом, как раз у меня и проблема. Мне необходимо, создавая наследника, проинициализировать переменную раньше, чем вызовется конструктор базового класса. Для примера :
0
|
||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||||
| 14.03.2017, 00:59 | |||||||
|
Если рассуждать от обратного, то наследник, по вашей логике, инициализирует поле родителя. А если он этого не сделает? Она будет в подвешенном состоянии? Ну вот забыл родитель это сделать .... . После вызова конструтора родителя объект, что внутри родителя должен уже быть в полной боевой готовности!
0
|
|||||||
|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
||||||
| 14.03.2017, 01:03 [ТС] | ||||||
|
На этот случай в родителе дефолтное значение :
Как раз, таки, мне это и нужно. Если в наследнике не указать значение, то оно будет неким по-умолчанию. Это один из моментов в моей задаче.
0
|
||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||||
| 14.03.2017, 01:12 | ||||||||
Добавлено через 3 минуты alkl, нельзя в списки инициализации наследника инициализировать поля родителя, потому что они уже проинициализированы - смотрите еще раз пример с MustBeInited() Добавлено через 4 минуты Еще довод: http://en.cppreference.com/w/c... lizer_list
and non-static subobjects data members ? Нету такой - потому, что это не верно
1
|
||||||||
|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
||
| 14.03.2017, 01:13 [ТС] | ||
|
Будем дальше думать, спасибо...
0
|
||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 14.03.2017, 01:15 | ||
Cannot init base class member - он не подозревает, что вы хотите невозможного
1
|
||
|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
|||
| 14.03.2017, 01:23 [ТС] | |||
![]() В общем, картина стала ясна. Будем кумекать, как лучше сделать ... Хочется иметь некоторые переменные по-умолчанию, а при создании наследника, иметь возможность их изменять до вызова базового конструктора. Причём, хотелось бы это делать в виде списка инициализации.
0
|
|||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||||
| 14.03.2017, 01:25 | ||||||||
_q(18) описал в посте после фразы Еще довод:. Он не верит своим двоичным сердцем, что вы настолько ошибаетесь, что пытаесь проинить то, что не можете - что можно проинить описано по ссылке http://en.cppreference.com/w/c... lizer_list
1
|
||||||||
|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
|||||||||||
| 14.03.2017, 01:35 [ТС] | |||||||||||
|
Значит, по мнению компилятора, в случае
Картина ещё интереснее разворачивается
0
|
|||||||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 14.03.2017, 01:46 | |
|
alkl, ага - почитайте ошибки
http://rextester.com/ITI45792 _q(18) http://rextester.com/KAGWC31525 _t(_q)
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 14.03.2017, 01:46 | |
|
1
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 14.03.2017, 01:50 | ||
|
ct0r,
Но моё мнение, полный бред. Особенно, при good practice мы упираемся рогами в Foo{"Hello", 12}
0
|
||
|
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
|
||
| 14.03.2017, 01:56 [ТС] | ||
|
http://rextester.com/KXUTNA47635
0
|
||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 14.03.2017, 01:58 | |
|
0
|
|
| 14.03.2017, 01:58 | |
|
Помогаю со студенческими работами здесь
20
Инициализация полей класса через vector<> Инициализация вещественных статических константных полей класса С++
Ошибка при наследовании класса
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|