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

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

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

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

28.02.2013, 22:53. Просмотров 534. Ответов 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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 22:53     Наследование классов
Посмотрите здесь:

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

Наследование классов - C++
Помогите, пожалуйста, разобраться - необходимо написать класс Administrator, кот наследуется (is derived) из класса SalariedEmployee: ...

Наследование классов - C++
никак не разберусь с наследованием, у нас тут в методичке дана по нему общая инфа, надо сделать как в методичке, но так не получается......

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

Наследование классов - C++
Доброго времени суток! Стоит следующая учебная задача: есть 3 класса потомка (в моем случае типы авто: легковое, грузовое, автобус) с...

Наследование классов - C++
Читал о наследовании классов. Там приводился такой пример: class Weapon { ... }; class MP5 : public Weapon { ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
303 / 274 / 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
Каратель
Эксперт С++
6552 / 3972 / 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
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.02.2013, 23:38     Наследование классов #7
Цитата Сообщение от Kgfq Посмотреть сообщение
а если у A, скажем, 5 конструкторов, все переписывать? Неужели не предусмотрели такого?
чего такого? для класса В компилятор генерирует конструктор по умолчанию без параметров, который вызывает конструктор по умолчанию класса А, но у класса А нет конструктора по умолчанию, как по-вашему должен поступить компилятор?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.03.2013, 01:20     Наследование классов #8
Цитата Сообщение от Kgfq Посмотреть сообщение
Можно ли как-то по-другому?
Можно. Создать для А конструктор по умолчанию.
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
01.03.2013, 03:32     Наследование классов #9
Kgfq, если не указывать в списке инициализации конструктора вызов конструктора поля класса (который не встроенный тип) или базового класса, то компилятор сгенерирует для него вызов конструктора по умолчанию. Если такого конструктора нет, то, естественно, будет ошибка компиляции.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:11  [ТС]     Наследование классов #10
Вы не поняли. Можно ли из мэйна указать, какой конструктор для A использовать?
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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++
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
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 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);
}
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
01.03.2013, 11:44  [ТС]     Наследование классов #16
Croessmah, да. Такое возможно?
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
01.03.2013, 11:56     Наследование классов #17
Kgfq, я бы ответил - нет. Хотя не исключено, что можно слепить какую-нибудь абракадабру. Но стоит ли игра свеч?
gray_fox
What a waste!
1411 / 1140 / 55
Регистрация: 21.04.2012
Сообщений: 2,362
Завершенные тесты: 3
01.03.2013, 15:19     Наследование классов #18
Kgfq, максимум, что получиться - наследовать нужный конструктор в B, но это уже C++11. В любом случае при создании объекта класса B всегда будет вызываться конструктор B.
alsav22
5416 / 4812 / 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++ - C++
решил я с SDL поиграться.... ругается на 9 строчку компилятор, где ошибку допустил не подскажете?) main.cpp #include <iostream> ...

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

Наследование классов - C++
Доброго времени Вам. я с толкнулся с неприятной проблемой делая лабораторную работу по ООП, а именно запутался(а если честно то и...


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

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

Не по теме:

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

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

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