Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
#1

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

29.04.2014, 03:14. Просмотров 3566. Ответов 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++):

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

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

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

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

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

Создание базового класса и наследника - C++
в данной программе , попросили добавить в void main ///camera obj//// и дописать в конструктор camera::camera() сразу вывод через...

8
0x10
2479 / 1652 / 248
Регистрация: 24.11.2012
Сообщений: 4,095
29.04.2014, 05:11 #2
Нет.

Цитата Сообщение от TheChosenOne Посмотреть сообщение
// А хотелось бы вызвать в теле конструктора класса-наследника
Зачем? Что не так со списком инициализации?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.04.2014, 05:25 #3
Можно перенести логику инициализации в функцию из конструктора и вызывать где хочется. Но необходимость этого в данном случае не ясна.
0
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
29.04.2014, 11:37  [ТС] #4
Спасибо за ответ )
Ну например у меня есть библиотека от которой я могу наследоваться. Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника. Т.к. стороны не могут быть отрицательными,то сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно перенести логику инициализации в функцию из конструктора и вызывать где хочется. Но необходимость этого в данном случае не ясна.
Ну,это понятно
0
Kuzia domovenok
1953 / 1806 / 140
Регистрация: 25.03.2012
Сообщений: 6,253
Записей в блоге: 1
29.04.2014, 11:41 #5
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Ну например у меня есть библиотека от которой я могу наследоваться. Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника. Т.к. стороны не могут быть отрицательными,то сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
на момент вызова тела конструктора, все поля и базовые части уже должны быть сконструированы. Иначе как тело конструктора будет работать с ними?!
Другое дело, что ты можешь проверить в конструкторе, верные ли значения у базовой части и если нет, как-то отреагировать.
1
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
29.04.2014, 13:24 #6
А как можно отреагировать, если значения уже неверные? Только бросить исключение и надеяться, что вызывающий код его поймает и примет решение, что делать дальше.....
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.04.2014, 14:41 #7
Цитата Сообщение от TheChosenOne Посмотреть сообщение
сначала бы хотелось проверить аргументы,а потом уже вызывать конструктор.
Так и проверять тогда надо ДО вызова конструктора. Если условие не выполняется, не создавать объект.
1
0x10
2479 / 1652 / 248
Регистрация: 24.11.2012
Сообщений: 4,095
29.04.2014, 16:03 #8
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Предположим это класс,который хранит 3 числа. Я наследуюсь от него, что бы создать класс,который работает с этими числами как со сторонами треугольника.
Это как раз тот случай, когда не нужно использовать наследование. Если удобно использовать именно тройку чисел, которая реализована в библиотеке, например, в виде класса triad, то лучше эту триаду сделать полем класса "треугольник".
1
TheChosenOne
13 / 13 / 1
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Вызвать метод базового класса из метода наследника - C++
Есть базовый класс с виртуальным методом, выводящим значение его полей. В классе-наследнике есть метод с таким же названием, и он также...

virtual function. Сохранение функциональности базового и класса наследника - C++
Как сделать так чтобы при вызове n.attack() или enemy->attack() выводилось надпись и " I'm enemy class " и "ninja attack !!! ". Другими...

Два конструктора для класса-наследника - C++
Класс B является наследником класса A. Для класса B нужно определить 2 конструктора: один - наследуется от конструктора класса А, второй...


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

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

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