0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
||||||
1 | ||||||
Конструктор базового класса27.06.2014, 04:01. Показов 1543. Ответов 18
Метки нет (Все метки)
Привет, друзья, есть, к примеру, такие классы:
0
|
27.06.2014, 04:01 | |
Ответы с готовыми решениями:
18
Вызвать конструктор производного класса без конструктора базового класса Конструктор базового класса Не вызывается конструктор базового класса Не вызывается нужный конструктор базового класса |
18826 / 9829 / 2403
Регистрация: 30.01.2014
Сообщений: 17,265
|
||||||
27.06.2014, 04:08 | 2 | |||||
Сообщение было отмечено Антон219 как решение
Решение
Почему бы не передавать ее параметром конструктора базового класса. Пытаться "инициализировать"* переменную базового класса из наследника напрямую - плохая идея.
1
|
27.06.2014, 08:40 | 4 | |||||
Может стоит использовать функцию обертку для вызова всех ваших функций?
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
27.06.2014, 10:07 | 5 |
Я думаю, это всего лишь пример, демонстрирующий принадлежность переменной x именно базовому классу. Потому как и функций с именами function1...N быть не должно
Ilot, всё же function_wrapper() имеет смысл сделать protected. Или даже private, если ее вызов может быть перенесен в конструктор Base, как предлагает DrOffset. Не по теме: Ilot, и добавлю немного занудства. Надеюсь Вы в реальном коде не используете одновременно переменные с одинаковым именем, но в разных регистрах.
2
|
27.06.2014, 10:23 | 6 |
Ну да имелось ввиду как protected. Она же для внутреннего пользования
Добавление функции обертки позволит вызывать данные функции не только при конструировании объекта, но и, например, в присвоении, хотя в этом случае и спецификатор для переменной необходимо менять на protected.
1
|
18826 / 9829 / 2403
Регистрация: 30.01.2014
Сообщений: 17,265
|
|
27.06.2014, 16:04 | 9 |
Потому что DrOffset прочитал что хочет ТС. Вот же написано в стартовом сообщени:
1
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
|
29.06.2014, 04:51 [ТС] | 10 |
Да, ребят, функции действительно в базовом классе определены, я забыл это вам прописать, надо было хоть многоточие поставить. DrOffset, да, что-то я не подумал об этом, наверное опыта мало, спасибо!. Ilot, к своему стыду, никогда не слышал о функциях обертки, попробую сделать и так тоже, чтоб разобраться в них, спасибо за пример! Вообще, всем спасибо, что помогаете!))
Добавлено через 30 минут DrOffset, ты писал: Ты имеешь ввиду, что если переменная объявлена в базовом классе, ее надо инициализировать в конструкторе базового же класса, а в наследных - вызывать конструктор базового в списке инициализации? Это применимо ко всем переменным базовых классов, я имею ввиду - это правила хорошего тона?
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
29.06.2014, 05:02 | 11 |
1
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
|
29.06.2014, 05:27 [ТС] | 12 |
Понял, Renji, я этого не знал, спасибо
0
|
18826 / 9829 / 2403
Регистрация: 30.01.2014
Сообщений: 17,265
|
|
29.06.2014, 05:33 | 13 |
Это и правило хорошего тона. И следствие механики языка. Инициализировать переменные базового класса можно только из конструктора базового класса. То что было у тебя - это присваивание. А инициализации вследствие отсутствия ее в конструкторе вообще не было. Поэтому я ее в том посте в кавычках написал.
1
|
29.06.2014, 14:33 | 14 |
Оно то пример, но если переменную сделать закрытой, то классы наследники ничего о ней не могу знать, а значит инициализация должна лежать на базовом классе, а не классе наследнике.
1
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
|
29.06.2014, 21:03 [ТС] | 15 |
Спасибо, ребят! Теперь так буду делать
0
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
|
01.07.2014, 19:34 [ТС] | 16 |
Ребят, скажите, а если такой вариант: да, я вызываю все функции в базовом конструкторе, перед этим инициализируя i в списке инициализации (вызываю конструктор базового в дочернем), но если у меня у наследника1 есть два своих наследника, то я уже не могу в них вызывать конструктор базового(самого первого) класса? Как тогда быть? Множественное наследование? Его вроде не советуют
0
|
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
|
|
01.07.2014, 19:44 | 17 |
1
|
18826 / 9829 / 2403
Регистрация: 30.01.2014
Сообщений: 17,265
|
||||||
01.07.2014, 19:56 | 18 | |||||
Антон219,
1. Параметры самых базовых протащить в промежуточный класс 2. сделать так:
1
|
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
|
|
02.07.2014, 01:15 [ТС] | 19 |
Да, разобрался, спасибо
0
|
02.07.2014, 01:15 | |
02.07.2014, 01:15 | |
Помогаю со студенческими работами здесь
19
Конструктор класса не видит конструктор по умолчанию другого класса Как сложить объект базового класса с объектом производного(наследуемого класса) Почему объект производного класса не видит префиксный оператор из базового класса? Вызов метода производного класса через обращение к методу базового класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |