Конструктор вызова 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) { }
Другие вопросы по тегам