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

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

Восстановить пароль Регистрация
 
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 22:53     Наследование классов #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A
{
public:
* * A(int a){}
};
 
 
class B : public A
{
public:
};
 
 
int main()
{
 B b(1);
}

Собственно вопрос: как вызвать конструктор A?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 22:53     Наследование классов
Посмотрите здесь:

наследование классов C++
наследование классов C++
Наследование классов C++
Наследование классов C++
C++ Наследование классов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.02.2013, 23:02     Наследование классов #2
Он вызывается автоматически при создании унаследованого класса объкта B.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 23:14  [ТС]     Наследование классов #3
xtorne21st, Я не настолько наивен.

"error C2664: B::B: невозможно преобразовать параметр 1 из "int" в "const B &"" - он не видит конструктора A, он просит конструктор для B. Неужели придется дублировать все конструкторы для B?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.02.2013, 23:17     Наследование классов #4
Цитата Сообщение от Kgfq Посмотреть сообщение
Я не настолько наивен
Цитата Сообщение от Kgfq Посмотреть сообщение
B b(1);
конструкторы не наследуются, не наивный вы наш.
нужно написать конструкор В который вызывает конструктор А
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
28.02.2013, 23:23     Наследование классов #5
Если я не ошибаюсь, то так это должно выглядеть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A
{
public:
* * A(int a){}
};
 
 
class B : public A
{
public:
  B(int a) : A(a){}
};
 
 
int main()
{
 B b(1);
}
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 23:30  [ТС]     Наследование классов #6
The_bolT, Да, так можно. Но тогда придется дублировать все конструкторы, что бы передать через B в A. Можно ли как-то по-другому?

Добавлено через 38 секунд
Jupiter, а если у A, скажем, 5 конструкторов, все переписывать? Неужели не предусмотрели такого?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.02.2013, 23:38     Наследование классов #7
Цитата Сообщение от Kgfq Посмотреть сообщение
а если у A, скажем, 5 конструкторов, все переписывать? Неужели не предусмотрели такого?
чего такого? для класса В компилятор генерирует конструктор по умолчанию без параметров, который вызывает конструктор по умолчанию класса А, но у класса А нет конструктора по умолчанию, как по-вашему должен поступить компилятор?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.03.2013, 01:20     Наследование классов #8
Цитата Сообщение от Kgfq Посмотреть сообщение
Можно ли как-то по-другому?
Можно. Создать для А конструктор по умолчанию.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
01.03.2013, 03:32     Наследование классов #9
Kgfq, если не указывать в списке инициализации конструктора вызов конструктора поля класса (который не встроенный тип) или базового класса, то компилятор сгенерирует для него вызов конструктора по умолчанию. Если такого конструктора нет, то, естественно, будет ошибка компиляции.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:11  [ТС]     Наследование классов #10
Вы не поняли. Можно ли из мэйна указать, какой конструктор для A использовать?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
01.03.2013, 11:18     Наследование классов #11
Цитата Сообщение от Kgfq Посмотреть сообщение
какой конструктор для A использовать?
Создать B таким конструктором, который вызывает нужный конструктор A
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:21  [ТС]     Наследование классов #12
Croessmah, а без этого можно как-то? Скажем есть класс BasicRect, у которого возможно 4 конструктора. Я наследую от него ColorRect, в котором должны быть те же конструкторы. Неужели копипаст?
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
01.03.2013, 11:35     Наследование классов #13
То, какой конструктор класса A будет вызван при создании класса B, определено в реализации конструктора B, который вызывается при создании B. Если не вполне ясно - озвучь, что конкретнее хочется получить на практике? какое поведение?

Цитата Сообщение от Kgfq Посмотреть сообщение
Скажем есть класс BasicRect, у которого возможно 4 конструктора. Я наследую от него ColorRect, в котором должны быть те же конструкторы. Неужели копипаст?
Ничего не поделаешь, если нужен конструктор A не по умолчанию - его вызов должен быть прописан в реализации конструктора B
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:37  [ТС]     Наследование классов #14
ITcrusader, а можно ли это (какой конструктор класса A будет вызван) определить не в реализации конструктора B, а в месте, где создаем объект?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
01.03.2013, 11:38     Наследование классов #15
Цитата Сообщение от ITcrusader Посмотреть сообщение
что конкретнее хочется получить на практике? какое поведение?
я так понял что что-то вроде
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct A{
   A();
   A(int);
};
struct B:A{
   B();
};
 
int main(){
   B obj(22);
   B * p = new B:A(22);
}
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:44  [ТС]     Наследование классов #16
Croessmah, да. Такое возможно?
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
01.03.2013, 11:56     Наследование классов #17
Kgfq, я бы ответил - нет. Хотя не исключено, что можно слепить какую-нибудь абракадабру. Но стоит ли игра свеч?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
01.03.2013, 15:19     Наследование классов #18
Kgfq, максимум, что получиться - наследовать нужный конструктор в B, но это уже C++11. В любом случае при создании объекта класса B всегда будет вызываться конструктор B.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.03.2013, 19:21     Наследование классов #19
Цитата Сообщение от Croessmah Посмотреть сообщение
я так понял что что-то вроде
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct A{
   A();
   A(int);
};
struct B:A{
   B();
};
 
int main(){
   B obj(22);
   B * p = new B:A(22);
}
Это должно компилироваться или просто идея?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 19:23     Наследование классов
Еще ссылки по теме:

Наследование классов C++
Наследование классов C++
C++ Наследование классов

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

Или воспользуйтесь поиском по форуму:
Croessmah
01.03.2013, 19:23     Наследование классов
  #20

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Это должно компилироваться или просто идея?
Это просто попытка описать суть вопроса ТС кодом. Не думаю, что он скомпилируется.

Yandex
Объявления
01.03.2013, 19:23     Наследование классов
Ответ Создать тему
Опции темы

Текущее время: 01:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru