Я боюсь, что здесь есть довольно много концептуальных ошибок.
Чтобы ответить на ваш непосредственный вопрос: ваш фруктовый класс не может понять «корзину», в которой он находится, поэтому не стоит спрашиватьэто работает в корзине.
Когда вы говорите
fruit apples[2];
, вы создаете два яблочных объекта, каждый из которых имеет метод eat () (я вернусь к этому вмгновение, потому что я не уверен, что это имеет смысл), а затем поместить их в массив.В самом массиве (я раньше называл его корзиной) содержатся яблоки, но у него нет метода eat ().Яблоки не знают, что они в массиве.Итак, чтобы съесть яблоки, вам нужен код для обхода массива (простите этот синтаксис, прошло много лет с тех пор, как я написал c ++)
for ( int i = 0; i < 2; i ++ ){
apples[i].eat();
}
Теперь вопрос в том, куда этот код должен идти?И это имеет основополагающее значение для идеи ОО-программирования: вы думаете о том, какие объекты могли бы разумно «понять» этот вид операций, иметь обязанности по уходу за фруктами.И поэтому у вас может быть класс Basket или что-то подобное.
Теперь перейдем к следующему объекту
fruit pie;
pie.eat();
Некоторые проблемы здесь, в первую очередь пирог, безусловно, не фрукт.Рассмотрите все, что может сделать фрукт, и все, что может сделать пирог, они очень разные - хорошо, вы можете нарезать их обоих и съесть их обоих, но они не более похожи, чем любая другая еда.Когда вы создаете классы, вы ищете ключевые сходства: у яблок, апельсинов, да, возможно, они имеют полезное сходство, поэтому Fruit как класс имеет смысл.
Вторая проблема, я думаю, вы ожидаете, что pie.eat ()оказать некоторое влияние на массив яблок.Но это совершенно разные объекты.Два объекта одного и того же класса обычно не знают друг о друге (есть некоторые продвинутые методы, позволяющие сделать это возможным, но даже не думайте об этом сейчас).
Теперь о финале, и я думаю, что наиболее важный момент: есть () метод.В моем мире яблоки ничего не едят и не едят сами.При выполнении ОО в значительной степени вы моделируете реальный мир.Когда вы получаете что-то вроде этого, метод, который на самом деле не соответствует рассматриваемым объектам, это, вероятно, подразумевает, что есть еще один класс объектов, которые мы еще не определили.
Не ясно, какие действияты моделируешь.Если вы отслеживаете свой инвентарь фруктов, то у вас может быть класс Basket.С помощью таких методов, как
addFruit( arrayOfFruit);
takeFruit( what kind of fruit I want);
howManyFruit(kind of fruit);
Если вы моделируете потребление калорий, у вас могут быть методы для фруктов
calories = takeOneBite();
biteLeft = howManyBitesLeft();
Поэтому нам нужно понять, что вы действительно хотите сделать с фруктами, прежде чем мыможет помочь в дальнейшем.