Я не хотел быть грубым, но ради вашего кода не делайте такого рода путаницу.
Во-первых, вам нужно научиться правильно делать отступы и пробелы в вашем коде.
class B: public A
{
public:
B(A )
{
cout<<"b";
}
};
Когда вы пишете такой код, он становится намного более читабельным. (См. Эту статью: http://lazyfoo.net/articles/article02/index.php)
Теперь, отвечая на ваш вопрос:
1) Конструктор класса B принимает объект A в качестве параметра (вы только забыл назвать вашу переменную B( A foo ){...}
).
2) Когда вы передаете 10 в качестве аргумента, вы делаете это в процессе A foo(10)
или в этом A foo = A(10)
. Это объясняет первый x
.
3) Следующее a
от конструктора A по умолчанию, а b
от конструктора B, по иронии судьбы, первый вызвал.