binarySearchImpl has to take 3 parameters. The item being searched for, the low index, and the high index.
Code:
int orderedArrayListType<elemType>::binarySearchImpl(const elemType& item, int first, int last)
You can't do it without doing that. This is because if it is less than the first middle value you pick then you only want to search in the first half.
You should also take a lesson from the C++ standard library and make the last parameter be the index of one-past the last item (equal to the count of items in other words). This saves a lot of places where you end up fudging it by adding or subtracting one. Those will actually ALL go away if you do that.