БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
1

Наследование конструкторов

12.06.2012, 15:24. Показов 5776. Ответов 11
Метки нет (Все метки)

Здравствуйте! У меня такой вопрос: Как сделать так, чтобы при создании объекта дочернего класса не вызывался конструктор родительского? При таком коде вызывается и тот, и тот конструкторы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
class parent {
    public:
        int a;
        parent () {
            a = 5;
        }
};
 
class child : public parent {
    public:
        int b;
        child () {
            b = 10;
            a = 1;
        }
};
 
int main () {
    child obj;
    cout << obj.a << " " << obj.b;
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2012, 15:24
Ответы с готовыми решениями:

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

Наследование конструкторов
Создать класс CPoint – точка. На его основе создать классы CColoredPoint и CLine. На основе класса...

Наследование конструкторов
если при наследовании классов отсутствует конструктор в базовом классе, то что тогда? Помогите,...

Наследование конструкторов?
Сдаю лабораторную на тему наследования в С++ : #include &lt;iostream&gt; using namespace std; class...

11
Каратель
Эксперт С++
6606 / 4025 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
12.06.2012, 15:36 2
Цитата Сообщение от Hagrael Посмотреть сообщение
Как сделать так, чтобы при создании объекта дочернего класса не вызывался конструктор родительского?
никак ты это не сделаешь ибо это противоречит наследованию
0
Эксперт С++
1672 / 1044 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
12.06.2012, 16:00 3
Конструкторов предка можно сделать несколько разных и при создании потомка вызывать нужный.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
class parent {
public:
    parent (): a(5) {}
    int A() const {return a;}
protected:
    int a;
    parent(int val): a(val) {}
};
 
class child : public parent {
public:
    child (): parent(1), b(10) {}
    int B() const {return b;}
private:
    int b;
};
 
int main () {
    child obj;
    std::cout << obj.A() << " " << obj.B();
    return 0;
}
1
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
13.06.2012, 07:03  [ТС] 4
А что означают вот эти записи?
C++
1
parent (): a(5) {}
C++
1
child (): parent(1), b(10) {}
Я никогда раньше не видел такого описания функций
В учебнике написано, что если ты не создаешь конструктор в потомке, то будет вызван родительский конструктор, после чего все переменные потомка обнулятся. Но что если я написал свой конструктор для потомка? Выходит, в этом случае родительский конструктор тоже вызывается?
0
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
13.06.2012, 13:14 5
Hagrael, Вызывается очевидно. Читайте про список инициализации.
0
Каратель
Эксперт С++
6606 / 4025 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.06.2012, 14:52 6
Цитата Сообщение от Hagrael Посмотреть сообщение
В учебнике написано, что если ты не создаешь конструктор в потомке, то будет вызван родительский конструктор
Конструктор родителя всегда будет вызван

Цитата Сообщение от Hagrael Посмотреть сообщение
после чего все переменные потомка обнулятся.
Конструктор будет вызван только для не POD типов

Цитата Сообщение от Hagrael Посмотреть сообщение
Но что если я написал свой конструктор для потомка? Выходит, в этом случае родительский конструктор тоже вызывается?
Конечно вызывается, например автомобиль является транспортным средством, создавая объект автомобиля создается и транспортное средство.
По твоей логике выходит так: создается объект автомобиля который является транспортным средством но при этом само транспортное средство не создается - где логика?
1
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
15.06.2012, 07:26  [ТС] 7
Jupiter, да, понимаю, это логично. Но если я хочу полностью переписать конструктор предка, т. е. сделать так, чтобы конструктор работал совершенно по-другому. Но ведь тогда вызов предыдущего конструктора будет бессмыслен. Его вызов, значит, отменить никак нельзя?
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2012, 07:33 8
Hagrael, ок. Произвели полную переконфигурацию, делаем не автомобиль, а самолет. И что, это не транспортное средство? В каком месте вызов конструктора будет бессмысленен?
1
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
15.06.2012, 08:11  [ТС] 9
soon, понятно, значит, на практике это никогда не нужно. Всем спасибо, все понял!
0
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
15.06.2012, 11:44 10
Цитата Сообщение от Hagrael Посмотреть сообщение
Jupiter, да, понимаю, это логично. Но если я хочу полностью переписать конструктор предка, т. е. сделать так, чтобы конструктор работал совершенно по-другому. Но ведь тогда вызов предыдущего конструктора будет бессмыслен. Его вызов, значит, отменить никак нельзя?
Ну так напиши у предка два конструктора:
1) Обычный
2) Специально для того случая когда ты при наследовании надумаешь его вызвать.

Не вижу проблемы, ты ведь при наследовании сам решаешь какой конструктор предка вызывать.
1
Эксперт С++
5053 / 3114 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
15.06.2012, 16:30 11
Hagrael, если у вас появилась необходимость в этом - значит плоха архитектура. Если наследовать круг от квадрата, возможно, и появится необходимость полностью переписывать логику инициализации. Однако такое наследование бред.
1
БТР - мой друг
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
16.06.2012, 15:35  [ТС] 12
Понятно!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2012, 15:35
Помогаю со студенческими работами здесь

Наследование конструкторов
Здрасти. Такая проблема. У меня есть классы с таким наследованием:...

Наследование конструкторов
Здравствуйте, мне нужно что бы player наследовал конструктор от aobject class aobject { public:...

Наследование конструкторов
Добрый день. Подскажите как правильно осуществить наследование конструктора в двух файлах h и cpp....

Наследование конструкторов и диструкторов
Дан класс движущееся средство с аргументами числа колес и грузоподъемность Создайте классы - ...


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

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

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