Еще одна важная часть информации - помните, что если класс не инициализирует объект-член через список инициализации конструктора, тогда конструктор по умолчанию для этого элемента будет вызываться до того, как будет выполнен первый оператор в конструкторе базового класса. Когда вы используете инициализатор, то, что вы на самом деле делаете, это указание конструктора, который будет использоваться INSTEAD конструктора по умолчанию.
Очевидно, что когда вы строите производный класс, родительский член класса уже сконструирован, поэтому вы не можете снова восстановить базовый элемент, что вы пытаетесь сделать в этом примере, включив его в производный класс список инициализации.
Как и в сторону, если вы все вы хотите иметь производный класс быть в состоянии установить значение A :: к определенному значению, то используйте следующий код вместо:
B::B()
{
a = 10;
}
возможный дубликат [Инициализировать защищенные члены родителя с списком инициализации (C++)] (http://stackoverflow.com/questions/2290733/initialize-parents-protected-members-with-initialization-list-c) – iammilind
перед тем, как задать этот вопрос, Я искал, но не нашел никого! –