なんか設計間違ってる気がするけど(同じクラスなんだから同じ処理であるべきと思う)
例えば
class Sample{
static int num_instances;
int _index;
public:
Sample(){_index = num_instance++;...}
void func(void){switch(_index){case 0:...} }
};
int Sample::num_instances = 0;