Наследование. Конструкторы производных классов

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
FloyDos
Сообщения: 25
Зарегистрирован: 14 июн 2009, 16:08

Здрасьте!

К примеру, А - базовый класс, В - производный.

Почему так:

Конструктор А не получает никаких аргументов -> генерируемый компилятором конструктор по умолчанию для В не требует никаких аргументов.
Конструктор А получает некоторые аргументы -> конструктор по умолчанию для В требует в качестве аргумента const B&
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

А пример кода где, и что выдает компилятор. А то что я смысл слов не пойму...
FloyDos
Сообщения: 25
Зарегистрирован: 14 июн 2009, 16:08

Код: Выделить всё

class A
{
public:
  A(int y){} 
};
class B :p ublic A
{
};
int _tmain(int argc, _TCHAR* argv[])
{
  A a(6);
  B b; //здесь ошибка error C2512: 'B' : no appropriate default constructor available; предлагает вызвать B(const B&)
	return 0;
}
если же конструктор для А то никаких ошибок в месте объявления b
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

А ну тогда все понятно. При наличии конструктора с параметром, компилятор не генерирует конструктор без параметра. Объяви его в явной форме.
A(){}. Или добавь конструктор в класс В с явным вызовом конструктора класса А с параметром.
Ответить