19 / 19 / 22
Регистрация: 25.08.2010
Сообщений: 90
|
||||||
1 | ||||||
ООП в C++: Вызов родительского конструктора с параметром при создании объекта дочернего класса08.01.2013, 11:00. Показов 19426. Ответов 16
Метки нет (Все метки)
Здравствуйте!
Столкнулся с такой проблемой: если есть родительский класс с конструктором, то при создании дочернего объекта от этого класса не получается вызвать этот конструктор родительского класса. Может запутанно описал проблему, попытался накидать небольшой пример, может из него понятнее будет:
15:7: ошибка: нет подходящей функции для вызова «A::A()» 15:7: замечание: candidates are: 21:1: замечание: A::A(int) 21:1: замечание: candidate expects 1 argument, 0 provided 6:7: замечание: A::A(const A&) 6:7: замечание: candidate expects 1 argument, 0 provided Помогите разобраться, как всё-таки правильно вызвать создание объекта дочернего класса?
0
|
08.01.2013, 11:00 | |
Ответы с готовыми решениями:
16
Вызов конструктора из родительского класса Вызов конструктора родительского класса Вызов базового конструктора с параметрами из дочернего класса Почему в списке инициализации конструктора дочернего класса нельзя вызывать конструктор родительского через его пространство имён? |
19 / 19 / 22
Регистрация: 25.08.2010
Сообщений: 90
|
|
08.01.2013, 11:12 [ТС] | 3 |
Schizorb, другого решения быть не может?
0
|
Неэпический
|
||||||
08.01.2013, 11:38 | 4 | |||||
2
|
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
|
||||||
08.01.2013, 11:59 | 5 | |||||
Можно еще так:
1
|
08.01.2013, 12:08 | 6 | |||||
Если я правильно понимаю проблему, то беда вовсе не в отсутствии конструктора A без параметров, а в том, что для B не написан вообще никакой конструктор. В итоге компилятор сгенерил конструктор для B без параметров, который в процессе своей работы вызывает конструктор A без параметров (которого нет). И лечить проблему надо именно тем, что написать конструктор для B, который вызовет из-под себя конструктор A с параметром, а вовсе не так, как было здесь предложено
Добавлено через 1 минуту Например, воткнуть его вовнутрь класса B (после "public:")
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
08.01.2013, 13:30 | 9 |
0
|
08.01.2013, 13:38 | 10 | |||||
Так это само собой. Но я, допустим, вижу в коде у автора
0
|
09.01.2013, 10:03 | 12 |
Берём класс, описывающий строку (или список). Очевидно, что конструктор по умолчанию создаёт пустую строку (или пустой список). А потому не надо проблему треугольника проецировать на всё программирование в целом
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
09.01.2013, 10:11 | 13 |
по умолчанию пустой треугольник, а к такому классу добавить методы инициализации его параметров,чем плохо, возможно на этапе инициализации нам известны не все параметры треугольника,а у нас например имеется метод который сделает ресайз треугольника чтоб вписать его в окружность, мы инициализируем пустой и вызываем метод ресайза, как пример
1
|
09.01.2013, 10:17 | 14 |
Пустая строка/список это одно из естественных состояний.
Это не проблема треугольника, а проблема создания объекта. Берем класс описывающий человека, если кто-то предполагает наличия конструктора без параметров, то кто будет создан? Добавлено через 2 минуты Тем, что пустых треугольников не существует. А потом еще надо не забыть присвоить ему корректное значение.
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
09.01.2013, 10:32 | 15 |
это ответственность разработчика, и "пустой треугольник" будет в данном случае некая нематериальная абстракция, которую нужно материализовать,например чтоб класс добавить в vector, то у него должен быть конструктор по умолчанию, он может быть параметрическим, но какие вы туда параметры будете отдавать? не справедливо отдавать предпочтение какому либо треугольнику, поэтому лучше делать его "пустым" а иммено привести к точке задав все параметры 0, либо делать без параметров
0
|
09.01.2013, 10:33 | 16 |
Конкретно для треугольника может вообще и не нужен конструктор без параметров, или если нужно - пусть в нем задаются какие-то значения по умолчанию или нулевые, мало ли какая задача.
В данной задаче уже есть конструктор без параметров для класса B, какой объект при этом должен создаваться и чем будут инициализироваться его элементы, это уж как автор решит, что именно ему нужно. Спор, по-моему, ни о чем.
0
|
09.01.2013, 15:13 | 17 |
Потому я и говорю, что не надо один конкретный случай проецировать на всё программирование. Для одной абстракции конструтор без параметров логического смысла не имеет, для другой абстракции - имеет. Конкретно по поводу данной темы - ТС вообще только учит Си++ и разбирается, как он работает. А потому замечание, что "конкструктор без параметров не имеет смысла" вообще не в тему
0
|
09.01.2013, 15:13 | |
09.01.2013, 15:13 | |
Помогаю со студенческими работами здесь
17
ООП: вызов переменной из родительского класса Как при создании дочернего окна передать ему указатель на static-переменную в оконной процедуре родительского? Инициализация конструктора и конструктора родительского класса Вызов родительского конструктора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |