440 / 97 / 42
Регистрация: 04.10.2011
Сообщений: 346
|
||||||
1 | ||||||
Не вызывается нужный конструктор базового класса07.08.2012, 12:16. Показов 810. Ответов 6
Метки нет (Все метки)
Здравствуйте. Я пока в процессе изучения С++. Имеется следующая структура классов:
Базовый: Person, расширяющие его: Student и Manager, и наследующий их обоих класс Employee - древо в виде ромба Вот собственно код:
class Manager : virtual public Person ... class Student : virtual public Person ... что бы убрать неоднозначность, но после этого в строке 66 (конструктор Employee) компилятор стал требовать явно указать конструктор без аргументов для базового класса Person: error: no matching function for call to 'Person::Person()'| когда же я его добавил (строка 15) все стало ок, но теперь при работе программы: Enter name (вводим: Vasya) Manager: name --- ??? post junior It is also a student of 1 course ............................................................................... Employee destruct Student destruct Manager destruct Person destruct Process returned 0 (0x0) execution time : 9.386 s Press any key to continue. Нету введённого нами имени! - я понимаю, что для базового класса Person вызывается конструктор без аргументов, который потребовал компилятор, но не понимаю почему он его потребовал, ведь у меня нигде нет ситуации, способствующей вызову Person() и почему не вызывается Person(string nm) - который мне нужен для инициализации поля name
0
|
07.08.2012, 12:16 | |
Ответы с готовыми решениями:
6
Не вызывается конструктор базового класса При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О Вызвать конструктор производного класса без конструктора базового класса Наследование: почему вызывается метод базового класса, а не производного? |
2278 / 1769 / 741
Регистрация: 27.07.2012
Сообщений: 5,253
|
||||||
07.08.2012, 12:39 | 2 | |||||
Не уверен, но по-моему, конструктор Employee должен выглядеть так:
0
|
07.08.2012, 12:40 | 3 | |||||
Попробуйте
так
1
|
2278 / 1769 / 741
Регистрация: 27.07.2012
Сообщений: 5,253
|
|
07.08.2012, 12:46 | 4 |
Если что: С.Дьхерст "Скользкие места С++", Совет 53. Инициализация виртуальных базовых классов (стр.124).
1
|
440 / 97 / 42
Регистрация: 04.10.2011
Сообщений: 346
|
|
07.08.2012, 12:54 [ТС] | 5 |
Отлично! Чётко и по существу - теперь всё ясно. Я предполагал что здесь дело в виртуальных наследниках. Отдельно спасибо за С.Дьхерста
yuron_477 - я бы уже и сам догодался, но всё же спасибо и Вам. Ещё маленький вопрос: в конструкторах у виртуальных наследников Manager и Student вообще не имеет смысла вызывать конструктор базового класса Person ?
0
|
2278 / 1769 / 741
Регистрация: 27.07.2012
Сообщений: 5,253
|
|
07.08.2012, 13:02 | 6 |
Я опечатался, и вы в след за мной. Стивен Дьюхерст (Stephen Dewhurst), если будете искать.
0
|
440 / 97 / 42
Регистрация: 04.10.2011
Сообщений: 346
|
|
07.08.2012, 13:13 [ТС] | 7 |
Да-да поисковик меня уже поравил.
А по-поводу того что:
0
|
07.08.2012, 13:13 | |
07.08.2012, 13:13 | |
Помогаю со студенческими работами здесь
7
Конструктор базового класса Конструктор базового класса Конструктор класса не вызывается Наследование. Конструктор базового класса в теле производного Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |