Конструктор вызова C++ в классе A из класса C (наследование)
Я застрял с программой, которую пишу через некоторое время, возясь и заканчивая книгу "С ++ через игровое программирование".
Ситуация выглядит следующим образом:
Class A
{
public:
A(int x)
protected:
int a;
};
A::A(int x):
a(x)
{}
Class B : public A
Class C : public B
{
public:
C(int x)
};
C::C(int x)
{
A(int x);
}
Могу ли я вызвать конструктор класса А в конструкторе класса С?
Из того, что я думаю, я знаю: B связан с A, а C связан с B, поэтому я должен быть в состоянии добраться до конструктора класса A из C, когда я смогу получить переменные и функции-члены, извлекая его.
1 ответ
Решение
Вы можете попробовать это:
class B : public A
{
public:
B(int x) : A(x) { }
};
class C : public B
{
public:
C(int x) : B(x) { }
};
Или, если вы ленивый (и используете C++ 11):
class B : public A
{
public:
using A::A(int);
};
class C : public B
{
public:
using B::B(int);
};
Это не сработает:
class C : public B
{
public:
C(int x) : A(x) { }
};
main.cpp: In constructor ‘C::C(int)’:
main.cpp:23:16: error: type ‘A’ is not a direct base of ‘C’
C(int x) : A(x) { }
^
main.cpp:23:19: error: use of deleted function ‘B::B()’
C(int x) : A(x) { }