Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
1

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

28.02.2013, 22:53. Просмотров 730. Ответов 19
Метки нет (Все метки)

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?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2013, 22:53
Ответы с готовыми решениями:

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс...

Заменить наследование классов на наследование интерфейсов
#include <iostream> #include <assert.h> using namespace std; int people_on_base = 100; int...

Наследование классов. Копирование производных классов
Здравствуйте всем, у меня такой вопрос: написал код #include "stdafx.h" class A //Создаем...

Наследование классов
Задание: Создать класс базовый класс «квадрат». Элементы класса (поля имеют статус доступа...

19
интересующийся
307 / 278 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
28.02.2013, 23:02 2
Он вызывается автоматически при создании унаследованого класса объкта B.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 23:14  [ТС] 3
xtorne21st, Я не настолько наивен.

"error C2664: B::B: невозможно преобразовать параметр 1 из "int" в "const B &"" - он не видит конструктора A, он просит конструктор для B. Неужели придется дублировать все конструкторы для B?
0
Каратель
Эксперт С++
6596 / 4017 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.02.2013, 23:17 4
Цитата Сообщение от Kgfq Посмотреть сообщение
Я не настолько наивен
Цитата Сообщение от Kgfq Посмотреть сообщение
B b(1);
конструкторы не наследуются, не наивный вы наш.
нужно написать конструкор В который вызывает конструктор А
0
72 / 72 / 12
Регистрация: 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);
}
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 23:30  [ТС] 6
The_bolT, Да, так можно. Но тогда придется дублировать все конструкторы, что бы передать через B в A. Можно ли как-то по-другому?

Добавлено через 38 секунд
Jupiter, а если у A, скажем, 5 конструкторов, все переписывать? Неужели не предусмотрели такого?
0
Каратель
Эксперт С++
6596 / 4017 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
28.02.2013, 23:38 7
Цитата Сообщение от Kgfq Посмотреть сообщение
а если у A, скажем, 5 конструкторов, все переписывать? Неужели не предусмотрели такого?
чего такого? для класса В компилятор генерирует конструктор по умолчанию без параметров, который вызывает конструктор по умолчанию класса А, но у класса А нет конструктора по умолчанию, как по-вашему должен поступить компилятор?
0
5475 / 4870 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.03.2013, 01:20 8
Цитата Сообщение от Kgfq Посмотреть сообщение
Можно ли как-то по-другому?
Можно. Создать для А конструктор по умолчанию.
0
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
01.03.2013, 03:32 9
Kgfq, если не указывать в списке инициализации конструктора вызов конструктора поля класса (который не встроенный тип) или базового класса, то компилятор сгенерирует для него вызов конструктора по умолчанию. Если такого конструктора нет, то, естественно, будет ошибка компиляции.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:11  [ТС] 10
Вы не поняли. Можно ли из мэйна указать, какой конструктор для A использовать?
0
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,166
Записей в блоге: 2
01.03.2013, 11:18 11
Цитата Сообщение от Kgfq Посмотреть сообщение
какой конструктор для A использовать?
Создать B таким конструктором, который вызывает нужный конструктор A
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:21  [ТС] 12
Croessmah, а без этого можно как-то? Скажем есть класс BasicRect, у которого возможно 4 конструктора. Я наследую от него ColorRect, в котором должны быть те же конструкторы. Неужели копипаст?
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
01.03.2013, 11:35 13
То, какой конструктор класса A будет вызван при создании класса B, определено в реализации конструктора B, который вызывается при создании B. Если не вполне ясно - озвучь, что конкретнее хочется получить на практике? какое поведение?

Цитата Сообщение от Kgfq Посмотреть сообщение
Скажем есть класс BasicRect, у которого возможно 4 конструктора. Я наследую от него ColorRect, в котором должны быть те же конструкторы. Неужели копипаст?
Ничего не поделаешь, если нужен конструктор A не по умолчанию - его вызов должен быть прописан в реализации конструктора B
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:37  [ТС] 14
ITcrusader, а можно ли это (какой конструктор класса A будет вызван) определить не в реализации конструктора B, а в месте, где создаем объект?
0
Грамотный. Безпорно.
16860 / 9756 / 1880
Регистрация: 27.09.2012
Сообщений: 24,166
Записей в блоге: 2
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);
}
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:44  [ТС] 16
Croessmah, да. Такое возможно?
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
01.03.2013, 11:56 17
Kgfq, я бы ответил - нет. Хотя не исключено, что можно слепить какую-нибудь абракадабру. Но стоит ли игра свеч?
1
What a waste!
1576 / 1277 / 171
Регистрация: 21.04.2012
Сообщений: 2,677
01.03.2013, 15:19 18
Kgfq, максимум, что получиться - наследовать нужный конструктор в B, но это уже C++11. В любом случае при создании объекта класса B всегда будет вызываться конструктор B.
0
5475 / 4870 / 831
Регистрация: 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);
}
Это должно компилироваться или просто идея?
0
Croessmah
01.03.2013, 19:23     Наследование классов
  #20

Не по теме:

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

0
01.03.2013, 19:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 19:23
Привет! Вот еще темы с ответами:

Наследование классов
Знаю, как унаследовать конструктор родительского класса, но с одинаковым количеством перменных. Как...

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

Наследование от классов
Здравствуйте! Вот у меня базовый класс Car. Надо продемонстрировать virtual, override , final и...

Наследование классов
Здравствуйте всем! Классы и наследования еще не изучил а задали решить задачу. Просьба может у...


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

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

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