私は に非常に慣れてC++
いませんが、バックグラウンドを持っているので、ほとんどの概念Java
を理解しています。OOP
入門ガイドを読んでいると、次の例に出くわしました。
[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)
のイニシャライザ リストに渡すことで、Java のキーワードにB::B(int something)
似ていると仮定するのは正しいですか? 別名、のコードを実行しますか? また、なぜイニタライザ リストからではなく呼び出すだけなのですか?super
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
最初に印刷されますか? そして、なぜこの順序で実行されるのでしょうか?
この単純な例でさえ、継承が起こっていることを把握して視覚化するのを難しくしている構文について、私は少し混乱しています。