Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.80
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
#1

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

12.06.2012, 15:24. Просмотров 4162. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2012, 15:24     Наследование конструкторов
Посмотрите здесь:

Наследование конструкторов - C++
Здрасти. Такая проблема. У меня есть классы с таким наследованием: KIERUNEK--&gt;PRZEDMIOT--&gt;OCENA&lt;--STUDENT Вот конструкторы класса...

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

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

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

Наследование конструкторов - C++
Здравствуйте, мне нужно что бы player наследовал конструктор от aobject class aobject { public: aobject(int xx,int yy,int** mm)...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.06.2012, 15:36     Наследование конструкторов #2
Цитата Сообщение от Hagrael Посмотреть сообщение
Как сделать так, чтобы при создании объекта дочернего класса не вызывался конструктор родительского?
никак ты это не сделаешь ибо это противоречит наследованию
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
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;
}
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
13.06.2012, 07:03  [ТС]     Наследование конструкторов #4
А что означают вот эти записи?
C++
1
parent (): a(5) {}
C++
1
child (): parent(1), b(10) {}
Я никогда раньше не видел такого описания функций
В учебнике написано, что если ты не создаешь конструктор в потомке, то будет вызван родительский конструктор, после чего все переменные потомка обнулятся. Но что если я написал свой конструктор для потомка? Выходит, в этом случае родительский конструктор тоже вызывается?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
13.06.2012, 13:14     Наследование конструкторов #5
Hagrael, Вызывается очевидно. Читайте про список инициализации.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.06.2012, 14:52     Наследование конструкторов #6
Цитата Сообщение от Hagrael Посмотреть сообщение
В учебнике написано, что если ты не создаешь конструктор в потомке, то будет вызван родительский конструктор
Конструктор родителя всегда будет вызван

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

Цитата Сообщение от Hagrael Посмотреть сообщение
Но что если я написал свой конструктор для потомка? Выходит, в этом случае родительский конструктор тоже вызывается?
Конечно вызывается, например автомобиль является транспортным средством, создавая объект автомобиля создается и транспортное средство.
По твоей логике выходит так: создается объект автомобиля который является транспортным средством но при этом само транспортное средство не создается - где логика?
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
15.06.2012, 07:26  [ТС]     Наследование конструкторов #7
Jupiter, да, понимаю, это логично. Но если я хочу полностью переписать конструктор предка, т. е. сделать так, чтобы конструктор работал совершенно по-другому. Но ведь тогда вызов предыдущего конструктора будет бессмыслен. Его вызов, значит, отменить никак нельзя?
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
15.06.2012, 07:33     Наследование конструкторов #8
Hagrael, ок. Произвели полную переконфигурацию, делаем не автомобиль, а самолет. И что, это не транспортное средство? В каком месте вызов конструктора будет бессмысленен?
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
15.06.2012, 08:11  [ТС]     Наследование конструкторов #9
soon, понятно, значит, на практике это никогда не нужно. Всем спасибо, все понял!
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
15.06.2012, 11:44     Наследование конструкторов #10
Цитата Сообщение от Hagrael Посмотреть сообщение
Jupiter, да, понимаю, это логично. Но если я хочу полностью переписать конструктор предка, т. е. сделать так, чтобы конструктор работал совершенно по-другому. Но ведь тогда вызов предыдущего конструктора будет бессмыслен. Его вызов, значит, отменить никак нельзя?
Ну так напиши у предка два конструктора:
1) Обычный
2) Специально для того случая когда ты при наследовании надумаешь его вызвать.

Не вижу проблемы, ты ведь при наследовании сам решаешь какой конструктор предка вызывать.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.06.2012, 16:30     Наследование конструкторов #11
Hagrael, если у вас появилась необходимость в этом - значит плоха архитектура. Если наследовать круг от квадрата, возможно, и появится необходимость полностью переписывать логику инициализации. Однако такое наследование бред.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2012, 15:35     Наследование конструкторов
Еще ссылки по теме:

Явное наследование конструкторов - C++
Если препод требует наследовать констуркторы явно что он имеет ввиду делать это только для дефолтных конструкторов или для не дефолтных...

Наследование конструкторов классов - C++
может ли конструктор класса-наследника иметь меньше переменных,чем конструктор класса-отца?

Наследование конструкторов с параметрами и деструктора - C++
Данно два класс. Родитель: class entity { private: int ID = 0; class object_list * list_; protected: std::string...

наследование классов и использование конструкторов - C++
Привет всем. У меня есть код, который нужно дополнить. class Skript { public: Skript(string v) : text(v) { } ...

Наследование - вызов конструкторов и деструкторов - C++
Делаю два класса - предок и потомок: class class_1_type { private: int t; public: class_1_type(int t_) { t = t_; cout &lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
16.06.2012, 15:35  [ТС]     Наследование конструкторов #12
Понятно!
Yandex
Объявления
16.06.2012, 15:35     Наследование конструкторов
Ответ Создать тему
Опции темы

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