Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
1

Наследуются ли конструкторы?

12.08.2016, 10:02. Показов 3461. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет.
Хочу спросить, если базовый класс имеет открытый конструктор по умолчанию, то при открытом наследовании будет ли создан конструктор по умолчанию в прямом производном классе, если он не определен явно(стоит сказать, что явно определены другие конструкторы, но не конструктор по умолчанию)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2016, 10:02
Ответы с готовыми решениями:

Почему не наследуются конструкторы?
Здравствуйте. Гугл говорит, что конструкторы в C++ унаследовать никак нельзя. Почему так? В чём...

Наследуются ли конструкторы и деструкторы?
При наследовании происходит ли наследование конструкторов и деструкторов базового класса?

Какие методы родительского класса не наследуются?
1. конструктор копирования 2. конструктор по умолчанию 3. перегруженная операция присваивания 4....

Какие методы родительского класса не наследуются?
1. конструктор копирования 2. конструктор по умолчанию 3. перегруженная операция присваивания 4....

33
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
12.08.2016, 10:09 2
Ну, конструкторы не наследуются, поэтому что там есть у базового на ситуацию не влияет. Не будет.
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
12.08.2016, 10:13 3
Ferrari F1, всего то пару строчек можно было черкануть что б проверить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Base
{
    Base() {}
};
 
struct Derived : Base
{
    Derived(int) {}
};
 
int main()
{
    Derived d; //no matching function for call to 'Derived::Derived()'
}
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.08.2016, 10:20  [ТС] 4
notAll, а если так, то будет ли вызван вызван конструктор по умолчанию класса Base для инициализации базовой части объекта произв. класса?
C++
1
2
3
4
5
struct Derived : Base
{
    Derived() = default;
    Derived(int) {}
};
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
12.08.2016, 10:23 5
Да, будет вызван конструктор Base() по умолчанию.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.08.2016, 10:25  [ТС] 6
notAll, а есть разница, если в произв. классе прописать так
C++
1
Derived() = default;
или так

C++
1
Derived() {};
?

Или надо делать так:
C++
1
Derived() : Base() {};
?
0
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
12.08.2016, 10:44 7
Все три версии равносильны. Я предпочитаю версию с default.
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
12.08.2016, 10:45 8
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Или надо делать так:
C++
1
Derived() : Base() {};
Не обязательно. Если инициализатор данного-члена или подобъекта-предка отсутствует в списке инициализации, то для него вызывается конструктор по умолчанию.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.08.2016, 10:47  [ТС] 9
Вопрос решен! )

Добавлено через 10 секунд
Цитата Сообщение от notAll Посмотреть сообщение
Я предпочитаю версию с default.
я тоже_)
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
12.08.2016, 10:51 10
Ferrari F1,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
 
 
struct Base
{
    Base(int){}
};
 
 
struct Derived : Base
{
    using Base::Base;//Наследнование конструкторов
};
 
int main()
{
    Derived x (55);
}
http://rextester.com/ZIHH56430
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.08.2016, 10:53  [ТС] 11
Цитата Сообщение от Mr.X Посмотреть сообщение
конструкторы не наследуются
C++
1
2
3
4
5
6
7
8
9
10
struct Base
{
    Base() = default;
    Base(int) {}
};
 
struct Derived : Base
{
    using Base::Base; // унаследовал к-тор
};
Добавлено через 1 минуту
HelicopterK52, опередил)
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
12.08.2016, 11:04 12
Ferrari F1, конструктор наследуется , а вот доступен ли он для вызова ... . Переименуйте ему тему)
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
12.08.2016, 11:08 13
недавно цитату Страуструпа перетирали, он говорит, что конструкторы наследуются (в С++11).
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
12.08.2016, 11:09  [ТС] 14
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Переименуйте ему тему)
тему переименовал Ilot, все косяки на него
Таким образом, тема будет иметь уже 3тье название.

НО я не хотел бы переводить тему в спор, наследуются ли они в прямом смысле слова или нет.
Какая вобще разница? главное, чтобы выполнялось то, что ожидается
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
12.08.2016, 11:13 15
rikimaru2013,
Members of a base class other than constructors are said to be inherited by the derived class. Constructors of a base class can also be inherited as described in 7.3.3.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
12.08.2016, 11:18 16
HelicopterK52, ну вы ж понимаете, что после Constructors of a base class can also be inherited читать тяжело?)

Летаю ли курицы? Да. А то, что домашние, которых подрезают нет - как-то пофиг ))
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
12.08.2016, 11:21 17
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ну вы ж понимаете, что после Constructors of a base class can also be inherited читать тяжело?)
Чего? У меня аж парсер сломался. Если про 7.3.3, то это как раз о using'е.
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
12.08.2016, 11:21 18
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
тему переименовал Ilot, все косяки на него
Тему переименовал я. Кстати, спасибо мне, что не стал санкции применять, да ведь? И да, если название не отражает суть темы, то придумайте новое название (нормальное), а не как было в начале "Про наследование".
1
Ferrari F1
12.08.2016, 11:22  [ТС]
  #19

Не по теме:

gru74ik, тогда извиняюсь))

0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
12.08.2016, 11:23 20
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
//Наследнование конструкторов
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
//унаследовал к-тор
Ну, это, скорее, игра слов, так как "наследование" конструкторов - это не наследование в обычном смысле.
Но даже в этом "наследовании" не "наследуются" конструкторы по умолчанию, копирования и перемещения.
Компилятор воспринимает их как отсутствующие и создает сам, как обычно. Единственно здесь появляется разрешение на это.
0
12.08.2016, 11:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2016, 11:23
Помогаю со студенческими работами здесь

Описать базовый класс автомобиль и от него наследуются классы: грузовые авто, уборочные авто, спортивные авто
Всем привет!:) хочу спросить кто нибудь писал программы с наследованием на С++? Интересны задачи...

Webpack собирает проект, а приложение говорит что мои конструкторы не конструкторы
Помогите пожалуйста, в едином файле (не билде) всё работает хорошо, как только начинаю отделять...

Не наследуются стили
Оформляю меню нестандартными шрифтами. Возникла следующая проблема: категории и подкатегории никак...

Не наследуются экземпляры
class.php&lt;?php class question { private...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru