Here is my recommendation as to how to approach this project. I would recommend that you implement the classes and test them in order. To test the starfish class, I would add a method named "print" to the Starfish class that shows the contents of the object, or overload the output operator to do the same. Then you can write a main function that creates some starfish objects, adds them to a list, prints the list, calls some of the methods on the objects, and prints the list again. Here is a main function that does this: int main(){ Starfish one, two, three, four; Starfish *sflist = &one, *ptr; one.setNextStarfish(&two); two.setNextStarfish(&three); three.setNextStarfish(&four); ptr = sflist; while (ptr != NULL){ ptr->print(); ptr = ptr->getNextStarfish(); } cout << endl; one.grow(); one.grow(); one.grow(); two.grow(); two.grow(); two.starve(); three.grow(); three.starve(); three.feed(); ptr = sflist; while (ptr != NULL){ ptr->print(); ptr = ptr->getNextStarfish(); } return 0; } And here are the results if you run this on my laptop: 1 1 0xbffffc10 1 1 0xbffffc20 1 1 0xbffffc30 1 1 0 4 1 0xbffffc10 3 0 0xbffffc20 2 1 0xbffffc30 1 1 0 ----------------------------------------------------------------- Next, I would add a method to the Plot class that printed out the contents of a list of Starfish (I called mine PrintStarfishList). Then you can test the plot class with a a main function similar to this one: int main(){ Plot testplot; Starfish *retval; // Add some starfish to test for (int i = 0; i < 5; i++){ testplot.addStarfish(new(Starfish)); } // See what we have cout << "List:" << endl; testplot.printStarfishList(); cout << "Barnacles " << testplot.getNumBarnacles() << endl; cout << "Starfish " <print(); ptr = ptr->getNextStarfish(); } cout << endl; // Now the starfish in the plot should be old enough to spawn, // lets make sure we get something out cout << "Number of spawned larvae:" << endl; cout << testplot.spawnStarfish() << endl; return 0; } Which produced the following output on my laptop: List: 1 1 0x99410 1 1 0x99420 1 1 0x99430 1 1 0x99440 1 1 0 Barnacles 10 Starfish 5 List: 2 1 0x99410 2 1 0x99420 2 1 0x99430 2 1 0x99440 2 1 0 Barnacles 6 Starfish 5 Return: 0 List: 3 1 0x99410 3 1 0x99420 3 1 0x99430 3 1 0x99440 3 1 0 Barnacles 2 Starfish 5 Return: 0 List: 4 1 0x99410 4 1 0 Barnacles 0 Starfish 2 Return: 0x99420 Returned list of unfed starfish 3 1 0x99430 3 1 0x99440 3 1 0 Number of spawned larvae: 2 Notice the the number of larvae is somewhat random, so your results may vary. ----------------------------------------------------------------- Finally, we need to test the Seashore class. The best way to do this is to instrument the various methods to ensure that they are working correctly, then run it through the Seashore_sim class. Here is what I did to test each method in the Seashore class: advanceTime: This is the biggest function. I made it so that it would show the number of barnacles and starfish in each plot for each round. I also made it show me the list of starfish returned from each plot, and where each was moved to make sure that the sums shown in each plot were correct. Basically, I was looking to see what happened at each step of the way, to make sure it matched the rules. totalBarnacles, totalStarfish: I just checked that the results returned matched what I saw in the advanceTime method above. seedStarfish: I just added code that showed me the state of all plots before and after the seeding, to make sure it happened correctly. I already was confident that each plot returned the right value because I tested it above.