Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

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

28.02.2013, 22:53. Просмотров 578. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 22:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование классов (C++):

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

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

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

Наследование классов - C++
Собирал программу по частям, подскажите как исправить ошибки. #include <iostream> #include <conio.h> class Vehicle //...

Наследование классов - C++
Здравствуйте! Вот написан мой код ниже. Я когда пытаюсь ввести "What give animal:" идёт прекращение работы. Не понимаю почему. Помогите...

наследование классов - C++
Здарова, народ! :D Вот сижу и пытаюсь сделать задание из книги по которой "учимся программировать в универе", а там такой поворот...

19
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.02.2013, 23:02 #2
Он вызывается автоматически при создании унаследованого класса объкта B.
0
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?
0
Jupiter
Каратель
Эксперт С++
6565 / 3986 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.02.2013, 23:17 #4
Цитата Сообщение от Kgfq Посмотреть сообщение
Я не настолько наивен
Цитата Сообщение от Kgfq Посмотреть сообщение
B b(1);
конструкторы не наследуются, не наивный вы наш.
нужно написать конструкор В который вызывает конструктор А
0
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);
}
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
28.02.2013, 23:30  [ТС] #6
The_bolT, Да, так можно. Но тогда придется дублировать все конструкторы, что бы передать через B в A. Можно ли как-то по-другому?

Добавлено через 38 секунд
Jupiter, а если у A, скажем, 5 конструкторов, все переписывать? Неужели не предусмотрели такого?
0
Jupiter
Каратель
Эксперт С++
6565 / 3986 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.02.2013, 23:38 #7
Цитата Сообщение от Kgfq Посмотреть сообщение
а если у A, скажем, 5 конструкторов, все переписывать? Неужели не предусмотрели такого?
чего такого? для класса В компилятор генерирует конструктор по умолчанию без параметров, который вызывает конструктор по умолчанию класса А, но у класса А нет конструктора по умолчанию, как по-вашему должен поступить компилятор?
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.03.2013, 01:20 #8
Цитата Сообщение от Kgfq Посмотреть сообщение
Можно ли как-то по-другому?
Можно. Создать для А конструктор по умолчанию.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
01.03.2013, 03:32 #9
Kgfq, если не указывать в списке инициализации конструктора вызов конструктора поля класса (который не встроенный тип) или базового класса, то компилятор сгенерирует для него вызов конструктора по умолчанию. Если такого конструктора нет, то, естественно, будет ошибка компиляции.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:11  [ТС] #10
Вы не поняли. Можно ли из мэйна указать, какой конструктор для A использовать?
0
Croessmah
Пришел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,998
Записей в блоге: 3
Завершенные тесты: 1
01.03.2013, 11:18 #11
Цитата Сообщение от Kgfq Посмотреть сообщение
какой конструктор для A использовать?
Создать B таким конструктором, который вызывает нужный конструктор A
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:21  [ТС] #12
Croessmah, а без этого можно как-то? Скажем есть класс BasicRect, у которого возможно 4 конструктора. Я наследую от него ColorRect, в котором должны быть те же конструкторы. Неужели копипаст?
0
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
01.03.2013, 11:35 #13
То, какой конструктор класса A будет вызван при создании класса B, определено в реализации конструктора B, который вызывается при создании B. Если не вполне ясно - озвучь, что конкретнее хочется получить на практике? какое поведение?

Цитата Сообщение от Kgfq Посмотреть сообщение
Скажем есть класс BasicRect, у которого возможно 4 конструктора. Я наследую от него ColorRect, в котором должны быть те же конструкторы. Неужели копипаст?
Ничего не поделаешь, если нужен конструктор A не по умолчанию - его вызов должен быть прописан в реализации конструктора B
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:37  [ТС] #14
ITcrusader, а можно ли это (какой конструктор класса A будет вызван) определить не в реализации конструктора B, а в месте, где создаем объект?
0
Croessmah
Пришел
Эксперт CЭксперт С++
13565 / 7716 / 873
Регистрация: 27.09.2012
Сообщений: 18,998
Записей в блоге: 3
Завершенные тесты: 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);
}
0
01.03.2013, 11:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 11:38
Привет! Вот еще темы с ответами:

наследование классов - C++
Народ, всем приветик! Уже 3 день сижу над етой темой, не получается задание, вчера выбрасывал на форум исходник, но в конце концов сделал...

наследование классов - C++
Помогите пожалуйста разобраться с задачей Создайте базу данных деканата. В ней фиксируются данные о 2 категориях студентах: студенты...

Наследование классов - C++
Пусть автомобиль характеризуется установленным двигателем, трансмиссией и количеством мест для пассажиров. Двигатель определяется...

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


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

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

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