I have a base class for pieces
class piece;
and an array containing derived objects
piece* board[8][8];
Advantag
I would go with the hierarchy and if I want to know the type (why?) have a virtual method which identifies the type.