Давайте возьмем конструктор B
:
B(){
A a;
a.display();
}
В нем вы создадите совершенно отдельный объект a
типа A
и вызовете для него display
.Этот вызов display
будет использовать объект a
, вообще ничего не зная о классе B
или его полностью отдельной переменной-члене cord
.
Один из возможных способов решить эту проблему - создатьконструктор A
, который принимает значение cord
в качестве аргумента, передает «правильное» значение в список инициализатора конструктора B
, а затем вызывает функцию display
для этого объекта:
struct A{
A() = default;
explicit A(int c)
: cord(c)
{
}
display(){
cout<<cord<<endl;
}
int cord = 25;
};
struct B : A{
B()
: A(30)
{
display(); // Equivalent to this->display();
}
};
Конечно, вы должны сделать что-то подобное для класса (или структуры) C
.
Обратите внимание, что я удалил переменную-член cord
из B
учебный класс.Это потому, что если вы объявите новую переменную-член с тем же именем, что и переменная-член в базовом классе, то вы фактически создадите совершенно новую переменную-член, которая не связана с той, что в родительском классе.И для простого примера, который вы показываете, нет необходимости «переопределять» переменную-член, так как она уже существует во всех дочерних классах.