Измените его на
cout << humanArray[i].getGender() << endl;
Техническая справка о том, почему это работает:
Переменная-член gender
объявлена private в классе Human
, поэтому другие классы (и их экземпляры) не могут получить к ней доступ (без специального разрешения). Функции-члены Human::getGender()
и Human::setGender()
объявлены public , поэтому к ним можно получить доступ к экземплярам (объектам) класса Human
.
Поскольку функция-член может получить доступ к закрытым членам (переменным и функциям) класса, к которому она принадлежит, Human::getGender()
(также верно для Human::setGender()
) может получить доступ к частному gender
переменная-член класса Human
.
Функция join()
является членом класса World
, который отличается от класса Human
, поэтому она имеет доступ только к открытым членам (т. Е. Имеет доступ к Human::getGender()
, но не до Human::gender
)
Доступ к элементам массива не имеет ничего общего с вышеуказанным. Доступ ко всем элементам массива осуществляется с помощью кода, который имеет видимость / доступ к массиву (представьте себе элементы, как если бы они были public внутри массива, без возможности установить их private )