Полагаю, у вас неправильно понято понятие ООП:
Shape a;
Square b;
Triangle c;
Это означает, что вы определили три разных объекта, и они занимают три отдельные области памяти в ОЗУ.
a.setInitialValue();
Это просто устанавливает элементы int test[3];
объекта a
.
Shape *Shape1=&b;
Shape *Shape2=&c;
Shape1->chgValue();
Shape2->chgValue();
Это должно изменить элементы int test[3];
объектов b
и c
соответственно; и это НЕ влияет на объект a
.
Ведь элементы int test[3];
из:
- the
a
: 1 2 3
-
b
: х 5 х
-
c
: х х 7
Примечание: x здесь означает undefined (в ОЗУ может быть какой-то мусор).
Обновлено с учетом комментариев OP
Если вы действительно хотите «изменить переменную, объявленную в базовом классе, вызывая функции с одинаковыми именами из разных дочерних классов, и измененная переменная будет доступна всем дочерним классам», тогда вы могли бы объявить int test[3];
в Shape
статические следующим образом:
class Shape
{
protected:
static int test[3];
public:
// other code goes here
// ...
};
int Shape::test[3];
// other code goes here
// ...