13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
1

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

29.04.2014, 03:14. Показов 8759. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2014, 03:14
Ответы с готовыми решениями:

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

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

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

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

8
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
29.04.2014, 05:11 2
Нет.

Цитата Сообщение от TheChosenOne Посмотреть сообщение
// А хотелось бы вызвать в теле конструктора класса-наследника
Зачем? Что не так со списком инициализации?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.04.2014, 05:25 3
Можно перенести логику инициализации в функцию из конструктора и вызывать где хочется. Но необходимость этого в данном случае не ясна.
0
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
29.04.2014, 11:37  [ТС] 4
Спасибо за ответ )
Ну например у меня есть библиотека от которой я могу наследоваться. Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника. Т.к. стороны не могут быть отрицательными,то сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно перенести логику инициализации в функцию из конструктора и вызывать где хочется. Но необходимость этого в данном случае не ясна.
Ну,это понятно
0
4004 / 3266 / 914
Регистрация: 25.03.2012
Сообщений: 12,198
Записей в блоге: 1
29.04.2014, 11:41 5
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Ну например у меня есть библиотека от которой я могу наследоваться. Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника. Т.к. стороны не могут быть отрицательными,то сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
на момент вызова тела конструктора, все поля и базовые части уже должны быть сконструированы. Иначе как тело конструктора будет работать с ними?!
Другое дело, что ты можешь проверить в конструкторе, верные ли значения у базовой части и если нет, как-то отреагировать.
1
Эксперт С++
2924 / 1273 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
29.04.2014, 13:24 6
А как можно отреагировать, если значения уже неверные? Только бросить исключение и надеяться, что вызывающий код его поймает и примет решение, что делать дальше.....
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.04.2014, 14:41 7
Цитата Сообщение от TheChosenOne Посмотреть сообщение
сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
Так и проверять тогда надо ДО вызова конструктора. Если условие не выполняется, не создавать объект.
1
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
29.04.2014, 16:03 8
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника.
Это как раз тот случай, когда не нужно использовать наследование. Если удобно использовать именно тройку чисел, которая реализована в библиотеке, например, в виде класса triad, то лучше эту триаду сделать полем класса "треугольник".
1
13 / 13 / 2
Регистрация: 13.09.2013
Сообщений: 113
29.04.2014, 17:51  [ТС] 9
Tulosba,ну,можно и так так
0x10, хм...возможно Вы правы. Во всяком случае,я просто хотел выяснить вопрос о конструкторе...
Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2014, 17:51
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru