Чтобы ответить на ваши вопросы:
foo(x) = 9; // is this wrong?
Я бы сказал, да, это неправильно, потому что это не имеет смысла, хотя это синтаксически допустимо. А что касается вашего «экзаменационного» вопроса (кто задает этот материал?):
Week & Week::highestSalesWeek(Week aYear[52])
{
Week max = aYear[0];
for(int i = 1; i < 52; i++)
{
if (aYear[i].getSales() > max.getSales()) max = aYear[i];
}
return max;
}
Что ж, указывать размерность массива для параметра бессмысленно, и в коде, очевидно, должен использоваться вектор. И исправление должно быть в сигнатуре функции:
Week Week::highestSalesWeek(Week aYear[52])
Другими словами - вернуть значение. Вы должны почти всегда возвращать значения, а не ссылки - ссылки предназначены для параметров функции.