Я очень новичок в C++
, но я исхожу из фона Java
, поэтому я понимаю большинство концепций OOP
. Я читаю через вводное руководство, и я наткнулся на этот пример:Список инициализаторов наследования C++
[Foo.H]
class A
{
public:
A(int something);
};
class B : public A
{
public:
B(int something);
};
[Foo.C]
#include "Foo.H"
A::A(int something)
{
printf("Something = %d\n", something);
}
B::B(int something) : A(something)
{
}
правильно ли считать, что при прохождении A(something)
к списку инициализаторе B::B(int something)
он похож на super
ключевое слово в Java - он же, он выполнит код A::A(int something)
? Кроме того, почему я только звоню A(something)
вместо A::A(something)
из списка инициаторов?
В основном я спрашиваю: это выше эквивалентно следующему:
B::B(int something)
{
A::A(something)
}
Позвольте мне расширить, почему я смущен.
Если бы я должен был использовать:
B::B(int something) : A(something)
{
int x = 5;
printf("x = %d", x);
}
Позвони код через
B::B(7);
Будет ли это распечатывают x = 5
или something = 7
первым? И почему он должен выполняться в этом порядке?
Я просто немного смущен относительно синтаксиса, который затрудняет понимание и визуализацию наследования, происходящего даже на этом простом примере.
Это обычно считается вежливым ждать ~ 24 часов, чтобы отметить ответ, как принято, чтобы дать людям время, чтобы увидеть и ответить правильно –