Код шоу объявляет класс с двумя членами следующим образом:
int *dhand[];
int *phand[];
Это два члена класса, но это недопустимо, стандарт C ++.Массивы переменной длины не являются стандартными C ++.
Таким образом, вся логика в этом коде становится неопределенным поведением.Вы наблюдали поведение, состоящее в том, что эти два массива выглядят одинаково.Правильно.Вот что означает неопределенное поведение, и это, кажется, поведение, которое получается с вашим конкретным компилятором и реализацией C ++.Ваш компилятор C ++, по-видимому, реализует это путем создания члена класса, размер которого составляет всего 0 байтов (в конце концов, размер массива не указан, поэтому он равен nuthin '), ожидая, что это будет последний классчлен, и приложение будет нести ответственность за выделение некоторой дополнительной памяти в дополнение к той, которая требуется для экземпляра этого объекта, чтобы таким образом получить псевдомассив.
Но с двумя членами классазаявляет, таким образом, это заканчивается двумя членами класса, которые фактически являются одинаковыми.Какое поведение вы наблюдали.Другие компиляторы C ++ могут очень хорошо сообщать об ошибке компиляции, поскольку программа некорректна в отношении стандарта C ++.
Чтобы исправить эту проблему, вы должны заменить эти члены класса на соответствующие массивы.Просматривая показанный код, похоже, вы ожидаете, что эти массивы, по сути, будут массивами переменного размера.Это то, для чего нужен std::vector
, и ваша книга C ++ должна иметь одну или несколько глав, в которых полностью объясняется, как использовать std::vector
для реализации массива-подобного объекта, который может соответственно увеличиваться и уменьшаться в размере.