Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/23: Рейтинг темы: голосов - 23, средняя оценка - 4.87
TheChosenOne
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
1

Вызов конструктора базового класса из класса-наследника

29.04.2014, 03:14. Просмотров 4329. Ответов 8
Метки нет (Все метки)

Можно ли вне списка инициализации вызвать конструктор базового класса ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A
{
      int a;
  public:
     A(int c):a(c){}
};
 
 class B :public A
{
  public:
      B(int c):A(c) // вызов в списке инициализации
    {
        // А хотелось бы вызвать в теле конструктора класса-наследника
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 03:14
Ответы с готовыми решениями:

Вызов конструктора базового класса
Здравствуйте! Я вот начал изучать C# и немножечко освежил ООП. Но вот у меня...

Вызов конструктора базового класса из порожденного
Есть Базовый класс студент: имеет поля: фамилия, адрес, тел., возраст. ...

Знакомство с наследованием. Вызов конструктора базового класса
В инете немного почиатл про наследование и решил сразу перейти к практике Есть...

Вызвать конструктор производного класса без конструктора базового класса
Здравствуйте! У меня есть базовый класс треугольник и производный класс...

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать...

8
0x10
2577 / 1756 / 289
Регистрация: 24.11.2012
Сообщений: 4,387
29.04.2014, 05:11 2
Нет.

Цитата Сообщение от TheChosenOne Посмотреть сообщение
// А хотелось бы вызвать в теле конструктора класса-наследника
Зачем? Что не так со списком инициализации?
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.04.2014, 05:25 3
Можно перенести логику инициализации в функцию из конструктора и вызывать где хочется. Но необходимость этого в данном случае не ясна.
0
TheChosenOne
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
29.04.2014, 11:37  [ТС] 4
Спасибо за ответ )
Ну например у меня есть библиотека от которой я могу наследоваться. Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника. Т.к. стороны не могут быть отрицательными,то сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно перенести логику инициализации в функцию из конструктора и вызывать где хочется. Но необходимость этого в данном случае не ясна.
Ну,это понятно
0
Kuzia domovenok
2390 / 2112 / 507
Регистрация: 25.03.2012
Сообщений: 7,597
Записей в блоге: 1
29.04.2014, 11:41 5
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Ну например у меня есть библиотека от которой я могу наследоваться. Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника. Т.к. стороны не могут быть отрицательными,то сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
на момент вызова тела конструктора, все поля и базовые части уже должны быть сконструированы. Иначе как тело конструктора будет работать с ними?!
Другое дело, что ты можешь проверить в конструкторе, верные ли значения у базовой части и если нет, как-то отреагировать.
1
CheshireCat
Эксперт С++
2912 / 1261 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
29.04.2014, 13:24 6
А как можно отреагировать, если значения уже неверные? Только бросить исключение и надеяться, что вызывающий код его поймает и примет решение, что делать дальше.....
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.04.2014, 14:41 7
Цитата Сообщение от TheChosenOne Посмотреть сообщение
сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
Так и проверять тогда надо ДО вызова конструктора. Если условие не выполняется, не создавать объект.
1
0x10
2577 / 1756 / 289
Регистрация: 24.11.2012
Сообщений: 4,387
29.04.2014, 16:03 8
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника.
Это как раз тот случай, когда не нужно использовать наследование. Если удобно использовать именно тройку чисел, которая реализована в библиотеке, например, в виде класса triad, то лучше эту триаду сделать полем класса "треугольник".
1
TheChosenOne
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
29.04.2014, 17:51  [ТС] 9
Tulosba,ну,можно и так так
0x10, хм...возможно Вы правы. Во всяком случае,я просто хотел выяснить вопрос о конструкторе...
Спасибо
0
29.04.2014, 17:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2014, 17:51

Вызов объектом базового класса функцию из производного класса!
Как можно осуществить вызов или передачу значения в базовый класс для...

Создание базового класса и наследника
в данной программе , попросили добавить в void main ///camera obj//// и...

Вызов метода базового класса из класса-потомка
Нужно вызывать из метода, переопределенного в потомке, соответствующий метод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru