Мне нужно использовать параметры по умолчанию для конструктора наследуемого класса.Параметры конструктора по умолчанию в классе наследования
class A
{
public:
A(int data)
{
a_data = data;
}
~A(){}
int a_data;
};
class B : public A
{
public:
B(int in, int num = DATA) : A(num)
{
b_data = in;
}
const int DATA = 9;
int b_data;
};
int main()
{
B b(3);
int x = b.a_data;
return 0;
}
Я нашел here, что я могу использовать параметры по умолчанию для конструктора класса ребенка. Но говорят, что мы должны использовать глобальный параметр.
Но я использую данные из класса «B», поэтому вызывается конструктор A до освобождения этих данных. В результате я получаю мусор в «х», но не 9.
! Итак, проблема была извлечена из другой, более конкретной. У меня есть базовый класс «Объект». И некоторым детям нравится «Моб» или «Игрок». Объект имеет физический (Box2D) объект внутри. Сертифицированно, все действия, создающие это физическое тело, одинаковы, за исключением некоторых параметров. Итак, я храню алгоритм в «Object» construtor и помещаю все необходимые данные в дочерние классы. Но я не могу достичь этих данных, прежде чем создавать «Объект», который требует данных.
Here является примером решения для одного зависимого класса.
Буду признателен за любую помощь.
Может кто-нибудь объяснить, почему версия выше все еще компилируется, но не производит 9? Компилятор просто игнорирует 'cost int num = 9' при построении A? – rivanov
@rivanov компилятор сначала создает базовую часть производного объекта и только после того, как он инициализирует другие члены объекта Derived. Когда он пытается построить базу, члены объекта Derived еще не инициализированы. – vsoftco
@vsoftco А я вижу, так что вы говорите, когда вызывается 'B (int in): A (num)', это выполняется до 'const int num = 9', который по умолчанию равен 0. Таким образом, 'A (num)' всегда вызывается с 0. Является ли это правильной интерпретацией? – rivanov