The point of polymorphism, roughly:
Code:
class Fruit;
class Apple : public Fruit;
class Banana : public Fruit;
class Grape : public Fruit;
Now I make a big array of Fruit, some of which are Apples, some of which are Banana, some of which are Grape.
Code:
std::vector <Fruit *> working_vec;
std::vector <Fruit> non_working_vec;
If I use pointers, then I can follow that pointer to the actual object and get that type information. If I
don't use pointers, then I have just the Fruit information (since I can only put a Fruit in the array and not some other type), and not the specific information about Apples, Bananas, or Grapes. Therefore none of the override functions will be called, since now I just have a Fruit, and not an Apple (say).